1.通过选项实现对字段的约束,选项如下
-
null: 如果为True,表示允许为空,默认是False。
-
blank:如果为True,表示该字段允许为空白,默认值是False。
对比:null是数据库范畴的概念,blank是表单验证范畴的。 -
db_column:字段的名称,如果未指定,则使用属性的名称。
-
db_index:若值为True,则在表中会为此字段创建索引,默认值是False.
-
default:给字段添加默认值。
-
primary_key:若为True,则该字段会成为模型的主键字段,默认值为False,一般作为AutoField的选项使用。
-
unique:如果为True,这个字段在表中必须有唯一值,默认为False.
eg:
class Student(models.Model):
name = models.CharField(null=False) #name字段不可为空
age = models.IntegerField(default=10) #age默认值为10
student_id = models.IntegerField(primary_key=True) #student_id 为该表的主键
.....(上述属性案例同上)
2.关联数据 on_delete
- CASCADE:这就是默认的选项,级联删除。
- PROTECT:保护模式,如果采用该选项,删除的时候,会抛出ProtectedError的异常。
- SET_NUL:置空模式,删除的时候,外键字段被设置为空,前提是blank=True,null=True,定义该字段的时候,允许为空。
- SET_DEFAULT:置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
- SET():自定义一个值,该值当然只能是对应的实体了。
eg:
class Student(models.Model):
name = models.CharField(max_length=10)
class News(BaseModel):
title = models.CharField( max_length=255)
#外键
st = models.ForeignKey(to=Student,on_delete=models.CASCADE)
3.Meta内部类
- db_table:指定表名
- abstract:指定是否是抽象类
- ordering:排序
- verbose_name:让字段可读
- verbose_name_plural:让复数字段可读
eg:
#django 迁移时,表名默认是app名+类名
class Cat(models.Model):
name = models.CharField(verbose_name="名字")
class Meta:
db_table = 'db_cat' #自定义表名
#让 models中的类不生成表,就要给该类声明为抽象类
#抽象类一般是继承类的父类,将两个或多个类中的相同的字段提取出来,写到抽象类中,该方法为继承。
class A(models.Model):
name = models.CharField(verbose_name='名字')
class Meta:#如果该类不生成表,八该类写成抽象类
abstract = True #声明为抽象类
class B(A):
#已经继承了A中的名字
age = models.IntegerField(verbase_name = '年龄')
class C(A):
#已经继承了A中的名字
render = models.IntegerField(verbase_name = '性别')
#如果对名字的定义需要修改时,只需要对A中的name进行修改即可,B、C自然就被修改了。