DjangoORM字段的介绍:
#自增长类型
AutoField() #自增长
BigAutoField() #自增长(更大)
#二进制数据
BinaryField()
#布尔类型
BooleanField()
NullBooleanField() #允许为空
#整数类型
PositiveSmallIntegerField() #5个字节大小(正整数)
SmallIntegerField() #6个字节大小(正负整数)
PositiveIntegerField() #10个字节大小(正整数)
IntegerField() #11个字节大小(正负整数)
BigIntegerField() #20个字节大小(正负整数)
#浮点类型
FloatField()
DecimalField()
#字符串类型
CharField() #对应MySQL中的varchar
TextField() # 对应MySQL中的longtext
#时间日期类型
DateField() #年月日
DateTimeField() #年月日时分秒
DurationField() #一段时间,在表中是 int类型
#其他类型
EmailField() #邮箱
ImageField() #图片
FileField() #文件
FilePathField() #文件地址
URLField() #url地址
UUIDField() #UUID
GenericIPAddressField() #Ip地址
##################关系型字段######################
#一对一关系
OneToOneField(
to = '主表名', # 可不加to
to_field = '主表字段名', # 默认为主表的主键
on_delete = '级联方式',
)
#多对一
ForeignKey(
to='主表名', # 可不加to
to_field='主表字段名', # 默认为主表的主键
on_delete='级联方式', # models.CASCADE
related_name='反向操作的manager' # 用于代替反向操作的manager, obj.child_set
db_constraint = True # 是否创建约束
)
ManyToManyFile() #多对多
#参数为:某个表
########所有字段都具有的参数############
db_colum="XXX" #修改数据库表中的字段名
primary_key=True #主键
verbose_name="XXX" #设置备注
unique=True #唯一键
null=True #数据库表为空
blank=True #前端提交表单是否为空
db_index=True #给字段建立索引
help_text="XXX" #显示帮助信息
editable=False #用户不能更改字段
############部分字段才有的参数###########
max_length=100 #字符串类型
unique_for_date=True #时间日期类型 -表示日期必须唯一
unique_for_month=True #时间日期类型 -表示月份必须唯一
auto_now=True #时间日期类型 -更新当前记录的时间
auto_now_add=True #时间日期类型 -创建当前记录的时间
max_digits=4 #DecimalField() -小数总共多少位
decimal_places=2 #DecimalField() -小数点多少位
############关系型字段有的参数###########
related_name="one" #外键关联的反向查询(父表查子表)
on_delete= #删除有关联的表的操作
DO_NOTHING #什么也不做
CASCADE #这就是默认的选项,级联删除,你无需显性指定它。
PROTECT #保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
SET_NULL #置空模式,外键字段被设置为null,前提就是blank=True, null=True,定义该字段的时候,允许为空。
SET_DEFAULT #置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
SET() #自定义一个值,该值当然只能是对应的实体了
#######################举个栗子###########################
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32)
class Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table = "table_name"
# admin中显示的表名称
verbose_name = '个人信息'
# verbose_name加s
verbose_name_plural = '所有用户信息'
# 联合索引
index_together = [
("pub_date", "deadline"), # 应为两个存在的字段
]
# 联合唯一索引
unique_together = (("driver", "restaurant"),) # 应为两个存在的字段