DOM 字段/参数
配置格式:
Module.字段(参数)
常用的字段归纳:
数字
models.AutoField() 自增列(int),必须设置为主键
models.IntegerField() 整型
models.FloatField() 浮点
models.DecimalField(max_digits=8,decimal_places=3) 精确浮点
字符串
models.CharField() 字符串,必须设置max_length 参数
models.TextField(Field) 文本类型
时间
models.DateField() models.DateTimeField() 参数: Auto_now #现在时间(更新时间) Auto_now_add #创建时间 注:(更新时间使用) 更新方式一: Obj = userinfo.objects.filter(id=1).update(name=”root”) 不生效 更新方式二: Obj = userinfo.objects.filter(id=1).first() Obj.save() 生效
其他
Models.BinaryField() 二进制
Models.ImageField() 图片
Models.FilePathField() 文件
常用属性参数:
Null 是否为空(T,F) Default 默认参数 Primary_key 主键 Db_index 索引 Unique 唯一索引 Verbose_name 显示字段中文 choices ->作用:1.在Django admin中显示下拉框,如下截图;2,避免连表查询,连表查询的效率非常低。 blank ->在Django admin中是否可以为空。null指的是在数据库中是否可以为空。 verbose_name ->在Django admin中显示字段中文。 editable ->在Django admin中是否可以被编辑。 error_messages ->在Django admin中显示的错误信息 helt_text ->在Django admin中显示提示信息 validators ->在Django form,自定义错误信息。
在Django admin中生效的字段:
Emailfield () GenericIPAddressField() URLField() EmailField(CharField) IPAddressField(Field) URLField(CharField) SlugField(CharField) UUIDField(Field)
FilePathField(Field) 参数: path, 文件夹路径 match=None, 正则匹配 recursive=False, 递归下面的文件夹 allow_files=True, 允许文件 allow_folders=False, 允许文件夹 FileField(Field) 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField) CommaSeparatedIntegerField(CharField)格式必须为逗号分割的数字 拓展: models.CharField 对应的是MySQL的varchar数据类型
char 和 varchar的区别 : char和varchar的共同点是存储数据的长度,不能 超过max_length限制, 不同点是varchar根据数据实际长度存储,char按指定max_length()存储数据;所有前者更节省硬盘空间;
返回值为字段在数据库中的属性,Django字段默认的值为:
'AutoField': 'integer AUTO_INCREMENT', 'BigAutoField': 'bigint AUTO_INCREMENT', 'BinaryField': 'longblob', 'BooleanField': 'bool', 'CharField': 'varchar(%(max_length)s)', 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', 'DateField': 'date', 'DateTimeField': 'datetime', 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', 'DurationField': 'bigint', 'FileField': 'varchar(%(max_length)s)', 'FilePathField': 'varchar(%(max_length)s)', 'FloatField': 'double precision', 'IntegerField': 'integer', 'BigIntegerField': 'bigint', 'IPAddressField': 'char(15)', 'GenericIPAddressField': 'char(39)', 'NullBooleanField': 'bool', 'OneToOneField': 'integer', 'PositiveIntegerField': 'integer UNSIGNED', 'PositiveSmallIntegerField': 'smallint UNSIGNED', 'SlugField': 'varchar(%(max_length)s)', 'SmallIntegerField': 'smallint', 'TextField': 'longtext', 'TimeField': 'time', 'UUIDField': 'char(32)',
联合索引设置
在Django model中对一张表的几个字段进行联合约束和联合索引,例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录。
class Cart(models.Model): user = models.ForeignKey( MyUser, verbose_name="用户" ) goods = models.ForeignKey( Goods, verbose_name="商品" ) num = models.IntegerField( verbose_name="商品数量" ) is_select = models.BooleanField( default=True, verbose_name="选中状态" ) class Meta: # 联合约束 其中goods和user不能重复 unique_together = ["goods", "user"] # 联合索引 index_together = ["user", "goods"]
unique_together = ["goods", "user"] 表示联合约束,其中"goods"和"user"表示不能重复,不能一样。
index_together = ["user", "goods"] 表示联合索引,其中"goods"和"user"联合同步查询,提高效率。