首页 > 其他分享 >多对多关系的创建,orm字段参数

多对多关系的创建,orm字段参数

时间:2023-04-28 16:47:23浏览次数:31  
标签:models max length 字段 orm 参数 Model True class

多对多关系的三种创建方式

# 1. 全自动的
图书表  作者表  -----》 多对多

# 第三张表
# 1. 全自动的
# class Book(models.Model):
#     title = models.CharField(max_length=32)
#     authors = models.ManyToManyField(to='Author')
#     
# 
# class Author(models.Model):
#     name = models.CharField(max_length=64)

# 2. 我们自己来创建第三张表:纯手动
# class Book(models.Model):
#     title = models.CharField(max_length=32)
#     
# 
# 
# class Author(models.Model):
#     name = models.CharField(max_length=64)
# 
# # 极大的好处:扩展性高了
# class Book2Author(models.Model):
#     book = models.ForeignKey(to='Book', on_delete=models.CASCADE)
#     author = models.ForeignKey(to='Author', on_delete=models.CASCADE)
#     bind_time = models.DateTimeField(auto_now_add=True)


# 第三种方式:半自动化
class Book(models.Model):
    title = models.CharField(max_length=32)
    # authors = models.ManyToManyField(to='Author',
    #                                  through='Book2Author',
    #                                  through_fields=('book', 'author')
    #                                  )
"""
注意:
    1. 还是需要一个虚拟字段authors----->models.ManyToManyField
    2. through:指定第三张表的表名
    3. through_fields:指定第三张表里面哪两个字段是关系字段
    4. through_fields=('author', 'book')里面的两个字段是有顺序要求的
    5. 这种方式是可以支持正反向查询的,但是不能使用那4个方法了,add remove set clear
"""
class Author(models.Model):
    name = models.CharField(max_length=64)
    books = models.ManyToManyField(to='Book',
                                     through='Book2Author',
                                     through_fields=('author', 'book')
                                     )

# 极大的好处:扩展性高了
class Book2Author(models.Model):
    book = models.ForeignKey(to='Book', on_delete=models.CASCADE)
    author = models.ForeignKey(to='Author', on_delete=models.CASCADE)
    bind_time = models.DateTimeField(auto_now_add=True)

常见字段和参数

# AutoField
int自增列,必须填入参数 primary_key=True。
 
# IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。
#  CharField
# DateField
# DateTimeField
 
auto_now=True
auto_now_add=True
 
# BooleanField(Field)
- 布尔值类型
# 在代码里面就是要True/False-------------->在数据库中存的是0/1
 
# TextField(Field)
- 文本类型------------>可以存大段的文本------------->当字符串比较少的时候,一般用varchar(512)
----------》text----->存一篇文章
 
# FileField(Field)  ------------> 可以上传文件
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""      上传文件的保存路径
 
# image = models.FileField(upload_to='文件上传的位置')
image = models.ImageField(upload_to='图片')  # 只能上传图片
 
# FloatField(Field)
- 浮点型
 
# DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度

ORM参数

#### null
 
用于表示某个字段可以为空。
 
# max_length
 
# verbose_name
 
# default----->指定默认值
# unique=True
 
# db_index=True 加索引

自定义字段

class FixedCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)
 
    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为max_length指定的值
        """
        return 'char(%s)' % self.max_length
 
 
class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用自定义的char类型的字段
    cname = FixedCharField(max_length=25)

标签:models,max,length,字段,orm,参数,Model,True,class
From: https://www.cnblogs.com/zxjwt/p/17362572.html

相关文章

  • System.getProperty()参数大全
    java.versionJavaRuntimeEnvironmentversionjava.vendorJavaRuntimeEnvironmentvendorjava.vendor.urlJavavendorURLjava.homeJavainstallationdirectoryjava.vm.specification.version......
  • 模型层(models层) -- ORM
    目录Django模型层之ORM介绍sqlite3数据库pycharm查看sqlite3文件Navicate连接sqlite3测试环境的搭建单表操作单表的增删改查常见的十几种查询方法查看原生SQL语句query属性在settings中配置LOGGING日志基于双下划线查询多表查询之表关系操作一对多的外键增删改查数据多对多外键增......
  • 模型的显存和参数量计算
    模型的显存和参数量计算https://blog.csdn.net/weixin_49305813/article/details/119179849https://blog.csdn.net/NODIECANFLY/article/details/102854842......
  • 某app请求参数分析
    前言这篇的前言有点冗长了,赶时间的朋友可以直接跳过。 记得还在读大学的时候,我就开始在网上到处找网络安全相关的知识,吾爱破解,看雪,飘云阁,hack80,i春秋,seebug,知道创宇,补天网啥的,要找个东西,能想到的平台都去搜,找到的虽然基本都很老的东西,但是对于小白的我来说,是真的有用,尤其是i春......
  • Web开发神器,最智能的Javascript IDE——WebStorm
    我的开发很大一部分是和Javascript打交道,很久以来,我一直在Spket、Aptana、VisualStudio、IntelliJIDEA、notepad++、vim等选择中徘徊,因为发现他们都很好,但都缺少我想要的……直到我开始使用WebStorm。 什么是我对JavascriptIDE选择的标准?1、快速智能的代码提示(全项目的)和补全2......
  • solr高亮显示和多索引字段查询
    Youcandirectlytestthe highlighting bypassingthehighlightparameters.e.g. hl=true&hl.fl=name,featuresAlso,youcanconfigurethehighlightdefaultswithinyourequesthandlerinsolrconfig.xmle.g.<requestHandlername="/browse"clas......
  • Performance_schema中的主从复制系列表总结
    主从半同步复制是目前用得最多的MySQL复制方案,日常工作中我们一般通过showslave status语句查看当前复制过程中状态信息,基本上能满足大多数场景下的需求。Performance_schema中提供了16个关于复制的监控表(包括组复制、过滤复制等,这里我们先不讨论),showslavestatus中的大多数信......
  • 界面控件DevExpress WinForm的垂直网格,让数据展示更灵活(二)
    DevExpressWinForm VerticalGrid(垂直网格)组件设计用于提供UI灵活性,它允许显示数据集中的单个行,或在其90度反向网格容器中显示多个数据集行。此外,开发者还可以将其用作属性网格,就像在VisualStudioIDE中找到的那样。PS:DevExpressWinForm拥有180+组件和UI库,能为WindowsForms......
  • 硬盘预读参数变化分析
    问题描述硬盘通过RAID(raid驱动为megaraid)方式挂载至系统。修改块设备sdb的预读参数(read_ahead_kb),使用dd命令向块设备写数据,预读参数发生了变化。问题总结预读参数改变的原因是由于systemd-udevd服务对sd块设备做了IO监听,一旦发生写操作,就会触发on_inotify处理函数重新获取分......
  • Python关于jsonpath路径里面包含中文或进行参数化的解决方案
    jsonpath路径包含中文当jsonpath路径包含中文时,我们只需要在jsonpath路径里面把中文用引号包裹即可准备json文件{"data":[{"Details":[{"姓名":"张三"}]}......