django系列4—数据库字段约束

字段约束

字段约束是在搭建数据库时,最字段进行的额外约束。

(1) null:默认为False,当设置为True时,该字段插入数据时可以为空,使用NULL进行填充。

(2) blank:默认为False,为False时在admin后台中表单必须要填内容,为True时可以允许表单为空。一般与null=True或defalut连用。

(3) choices:接收一个可重复的列表或元组(基本单位为二元组)。如果指定了该参数,在实例化该模型时,该变量只能选择列表中的值。

如:

class Person(models.Model):

  SHIRT_SIZES = (
        ('S', 'Small'),
       ('M', 'Medium'),
        ('L', 'Large'),
    )
  name = models.CharField(max_length=60)
  shirt_size = models.CharField(max_length=1,choices=SHIRT_SIZES)

(4) default:该变量的值,可以是一个值或者是一个可调用的对象,如果是个可调用的对象,每次实例化模型时都会调用该对象。默认不能是可变对象(模型实例,listset等),作为该对象的相同实例的引用将被用作在所有新的模型实例的默认值。而是将所需的默认值包装在可调用中。例如,如果要指定一个默认dictJSONField,使用函数:

def contact_default():
   return {"email": "[email protected]"}
contact_info = JSONField("ContactInfo", default=contact_default)

(5)help_text:额外的帮助文本,将与表单窗口小部件仪器显示,即使字段未在表单上使用,对于文档记录很有帮助。

(6) primary_key:如果设置为True,则该初始设置为该模型的主键。在一个模型中,如果没有对任何一个字段设置primary_key=True选项。Djnago中会自动添加一个IntegerField字段,用于设置为主键,因此除非像重写默认的主键,否则可以不手动设置主键。

(7)unique:如果设置为True,这个细分必须在整个表中保持值唯一。

(8)verbose_name:该字段的易读名称。如果未提供详细名称,则Django将使用字段的属性名称自动创建,将下划线转换为空格。在admin管理后台中会显示该名称。

(9)db_colum:用于此字段的数据库序列名称。如果未指定,Django将使用该字段的名称。

(10)db_index:如果为True,将为此字段创建数据库索引。

(11)db.tablespace:如果该字段已创建索引,则用于该字段的索引为数据库表空间的名称。默认值是项目的DEFAULT_INDEX_TABLESPACE设置(如果已设置),或者 db_tablespace是模型的设置(如果有)。如果后端不支持索引的表空间,则可以忽略。PostgreSQL和Oracle支持表空间。SQLite和MySQL不支持。

(12)editable:如果为False,则该字段将不会显示在管理员或其它任何人中ModelForm。在模型验证期间也将跳过他们。默认值为True。

(13)Error_messages:参数可以覆盖还该字段将引发的默认消息。传递一个包含与您要覆盖的错误消息相匹配的键的字典。错误消息包括:null,blank,invalid,invalid_choice,unique,和unique_for_date。

(14)unique_for_date:将设置为DateField或DateTimeField的日期字段的值是唯一的。当字段为DateTimeField时,仅考虑字段的日期部分。

(15)unique_for_month:要求该字段相对于月份是唯一的。

(16)unique_for_year:要求该字段对于年份是唯一的。

(17)validators:要为此字段运行的验证器列表。验证器示例:

from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
  if value % 2 != 0:
      raise ValidationError(
           _('%(value)s is not an even number'),
          params={'value': value},
      )

猜你喜欢

转载自blog.csdn.net/qq_42486675/article/details/106782389
今日推荐