Django模型字段参数参考
Django模型的参数笔记
1、通用参数
max_length
长度unique
是否唯一null
数据库是否可以为nullblank
前端是否必填primary_key
是否为主键default
默认值choices
可选值
2、外键参数
2.1、to_field
指定关联的字段
如果不使用to_filed
,默认关联的是ID,例如:
group表中有一条ID是1的记录
user表中关联的字段就是group中的ID字段
如果使用to_filed
,默认关联的是指定字段,如果该字段不存在,则会报错
使用to_filed关联group表的name字段to_field="name"
,name字段需要是唯一,因为关联是唯一的,例如
group表中有一条ID是1的记录
user表中关联的字段就是group中的name字段
可以看到关联字段是name字段了,但是字段名还是显示以id关联,通过db_column
指定
2.2、db_column
指定字段名
使用了db_column="group_name"
2.3、related_name
反向关系
举例:一个用户组可以拥有多个用户,而一个用户只能属于一个用户组,用户组对于用户属于一对多
正向查询:查询某个用户属于的组
user: User = User.objects.filter(name="admin").first()
user_group = user.group
print(user_group)
反向查询:查询某个用户组拥有的用户是哪些
通过模型名称_set来指定反向关系(本例子就是user_set)
admin_group = Group.objects.filter(name="admin组").first()
users = admin_group.user_set.all()
print(users)
上面是不使用related_name
的情况,使用了related_name
就可以直接使用related_name="group_users"
指定的名字来反向了
admin_group = Group.objects.filter(name="admin组").first()
users=admin_group.group_users.all()
2.3、on_delete
删除关联表中的数据时,当前表字段行为
含义:当删除外键表中的数据时,自己表中的数据字段如何处理,有以下几种值可选择
on_delete = models.CASCADE删除关联数据的时候,该条记录也删除
on_delete = models.DO_NOTHING删除关联数据的时候,什么操作也不做
on_delete = models.PROTRCT删除关联数据的时候,引发报错
on_delete = models.SET_NULL删除关联数据的时候,设置该字段为NULL,前提是null=True
on_delete = models.SET_DEFAULT删除关联数据的时候,设置该字段为默认值,前提是设置了default默认值
on_delete = models.SET删除关联数据时,设置为该值,例如
官方案例**
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
3、模型代码
from django.db import models
class User(models.Model):
id = models.AutoField(primary_key=True)
uid = models.CharField("用户ID", max_length=30, unique=True, null=False, blank=False)
name = models.CharField("用户名", max_length=30, unique=True, null=False, blank=False)
email = models.EmailField("用户邮箱", max_length=30, unique=True, null=False, blank=False)
group = models.ForeignKey(
"Group",
on_delete=models.SET_NULL,
null=True,
blank=True,
default=None,
to_field="name", # 指定关联字段 (默认是id)
db_column="group_name", # 指定列名 (默认是模型名称_id例如:group_id)
related_name="group_users" # 指定反向关系 (默认是模型名称_set例如:user_id)
)
created = models.DateTimeField("创建时间", auto_now_add=True)
updated = models.DateTimeField("修改时间", auto_now=True)
class Group(models.Model):
id = models.AutoField(primary_key=True)
gid = models.CharField("用户组ID", max_length=30, unique=True, null=False, blank=False)
name = models.CharField(
"用户组名称", max_length=30, unique=True, null=False, blank=False
)
created = models.DateTimeField("创建时间", auto_now_add=True)
updated = models.DateTimeField("修改时间", auto_now=True)
参考链接: