这篇注解介绍了字段选项,也就是字段的option属性。首先关于模型,它是数据库和python代码的映射关系,每个模型都是django.db.models.Model的子类。模型中的每个属性值(即字段)代表数据库中的一个字段。通过在models.py中定义类,可以自动生成数据库中的表和字段,比如前面的Question。如果不手动设置,默认会创建主键id字段。比如下面这个模型,我们就以此为例介绍各个字段的属性值:classQuestion(models.Model):SiZES=[('S','small'),('M','medium'),("L",'large'),]question_text=models.CharField(verbose_name="问题文本",max_length=200,help_text="question_text")pub_date=models.DateTimeField('日期')test_blank_char=models.CharField(blank=True,max_length=100)size=models.CharField(max_length=10,choices=SiZES)目录大致如下:null=True/Falsedefaultblank=True/Falseprimary_keyuniqueverbose_namedb_indexauto_nowauto_now_addchoices1,是否null=True/False允许该字段在数据库字段中为空。这个字段一般可以和下面的default默认值结合使用。2.默认字段的默认值。有时在创建一条数据时,指定了其他字段的值。如果不指定该字段,系统将赋予该字段默认值。Value,可以是整数、字符、日期、None等任意值。例如下面的模型:classQuestion(models.Model):name=models.CharField(max_length=20,default='')pub_date=models.DateField()创建一条数据:Question.objects.create(pub_date="2022-01-01")在创建数据的时候没有指定name的值,我们设置default为空字符串,那么系统在创建这个数据的时候,会默认给这个字段赋值''.如果我们设置default=None,表示默认为null(数据库的空值),系统会报错,因为字段默认一般是不允许为空的,所以我们需要配合null=使用没错,例子如下:classQuestion(models.Model):name=models.CharField(max_length=20,default=None,null=True)pub_date=models.DateField()那么当我们创建一条数据时,如果我们不指定name的值,name字段将默认为null。3.blank=True/Falseblank为blank,表示空串,字段是否允许为空串4.primary_key是否为主键因为我们建表的时候,比如上面的Question,主键id一般不设置,系统自动默认为我们创建一个以主键为id的自增整型数据。5、unique唯一约束设置为unique=True后,表会为该字段创建唯一索引,该字段的数据在本表中只能是唯一的。不能创建相同内容的数据,否则会报错。classQuestion(models.Model):name=models.CharField(max_length=20,unique=True)pub_date=models.DateField()比如我们创建一条数据,name的值为'hunter',然后再创建一条名为'hunter'数据的数据,系统会报错。6.verbose_namename=models.CharField(max_length=20,default=None,null=True,verbose_name='name')字段注释,除了用于用户查看和理解字段含义外,还可以显示在admin页面的字段标题中(admin后台管理页面后面会开注释介绍)7.db_index索引设置字段的参数为True,然后运行makemigrations和migrate为该字段创建索引ofthedatabasename=models.CharField(max_length=20,default=None,null=True,verbose_name='name',db_index=True)8.auto_now常用于日期字段。每次数据行的字段内容改变时,该字段会自动更新为当前时间。它经常用于updated_time字段示例:updated_time=models.DateTimeField(auto_now=True)9.auto_now_add通常用于日期字段。每个数据行创建后,该字段会自动填充当前时间,以后数据改变时不会改变。常用于created_time字段,例子:created_time=models.DateTimeField(auto_now_add=True)10.choices字段的可选值,常用于一个字段只能选择几个特定值的情况,比如状态success,failure,待定。这是一个示例用法:classQuestion(models.Model):SiZES=[('S','small'),('M','medium'),('L','large'),]question_text=models.CharField(verbose_name="questiontext",max_length=200)pub_date=models.DateTimeField('date')test_blank_char=models.CharField(blank=True,max_length=100)size=models.CharField(max_length=10,选择=SiZES)系统在保存时使用choices中各元素的第一个值,即SIZES中的'S''M','L'如果想获取项目中该字段的全名,可以使用get_field_display()方法,其中field是我们定义的字段名。比如上面的模型中,get_size_display()的官方方法是在模型类中定义一个CHOICES,然后为每个值定义一个合适的值。Constant以下为官方示例:classStudent(models.Model):FRESHMAN='FR'SOPHOMORE='SO'JUNIOR='JR'SENIOR='SR'GRADUATE='GR'YEAR_IN_SCHOOL_CHOICES=[(FRESHMAN,'Freshman'),(SOPHOMORE,'大二'),(JUNIOR,'大三'),(SENIOR,'大四'),(GRADUATE,'研究生'),]year_in_school=models.CharField(max_length=2,choices=YEAR_IN_SCHOOL_CHOICES,default=FRESHMAN,)以上就是这篇笔记的全部内容。主要介绍字段中的选项。下篇笔记会介绍字段的类型,比如IntegerField、CharField等。
