Django中字段选项的使用

字段选项

一、说明

所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数。下面的这些参数是所有字段都可以使用的,并且是可选的。

二、数据库相关

1、null

  1. 说明

    该值为True时,Django在数据库可以NULL保存空值。默认值为False。对于保存字符串类型数据的字段,请尽量避免将此参数设为True,那样会导致两种‘没有数据’的情况,一种是NULL,另一种是‘空字符串’。

  2. 示例代码

    class User(models.Model):
        # 介绍
         text = models.CharField(max_length=255, null=True)
    

3、db_column

  1. 说明

    该参数用于定义当前字段在数据表内的列名。如果未指定,Django将使用字段名作为列名

  2. 示例代码

    class UserInfo(models.Model):
        # 自定义主键
        uid = models.AutoField('主键', primary_key=True)
        # 用户名
        username = models.CharField('用户名', db_column='name', max_length=64)
        password = models.CharField('密码', db_column='pwd', max_length=64)
    
  3. 示例图

5、db_index

  1. 说明

    该参数接收布尔值。如果为True,数据库将为该字段创建普通索引。

  2. 示例代码

    class UserInfo(models.Model):
        username = models.CharField(max_length=64, db_index=True)
    
  3. 示例图

6、default

  1. 说明

    字段的默认值,可以是值或者一个可调用对象。如果是可调用对象,那么每次创建新对象时都会调用。设置的默认值不能是一个可变对象,比如列表、集合等等。lambda匿名函数也不可用于default的调用对象,因为匿名函数不能被migrations序列化。

  2. 注意

    在某种原因不明的情况下将default设置为None,可能会引发intergyerror:not null constraint failed,即非空约束失败异常,导致python manage.py migrate失败,此时可将None改为False或其它的值,只要不是None就行

7、unique

  1. 说明

    设为True时,数据库中字段建立唯一索引

  2. 注意:

    • 对于ManyToManyField和OneToOneField关系类型,该参数无效。
    • 当unique=True时,db_index参数无须设置,因为unqiue隐含了索引。
    • 自1.11版本后,unique参数可以用于FileField字段。
  3. 示例代码

    class UserInfo(models.Model):
        username = models.CharField('用户名', db_column='name', max_length=64, unique=True)
    
  4. 示例图

三、 Admin后台相关

1、verbose_name

  1. 说明

    Admin中显示的字段名称。为字段设置一个人类可读,更加直观的别名。

    对于每一个字段类型,除了ForeignKeyManyToManyFieldOneToOneField这三个特殊的关系类型,其第一可选位置参数都是verbose_name。如果没指定这个参数,Django会利用字段的属性名自动创建它,并将下划线转换为空格。

  2. 示例代码

    class UserInfo(models.Model):
        # 自定义主键
        uid = models.AutoField('主键', primary_key=True)
        # 用户名
        username = models.CharField('用户名', max_length=64)
        password = models.CharField('密码', max_length=32)
    

2、choices

  1. 说明

    Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

    用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值

  2. 示例代码

    class UserInfo(models.Model):
        SEX_CHOICES = (
            ('1', u'男'),
            ('2', u'女'),
        )
        sex = models.CharField(max_length=1, choices=SEX_CHOICES)
    

3、blank

  1. 说明

    Admin中是否允许用户输入为空

    True时,字段可以为空。默认False。和null参数不同的是,null是纯数据库层面的,而blank是验证相关的,它与表单验证是否允许输入框内为空有关,与数据库无关。所以要小心一个null为False,blank为True的字段接收到一个空值可能会出bug或异常。

  2. 示例代码

    class UserInfo(models.Model):
        # 自定义主键
        uid = models.AutoField('主键', primary_key=True)
        # 用户名
        username = models.CharField('用户名', max_length=64)
        password = models.CharField('密码', max_length=32)
    

4、editable

  1. 说明

    Admin中是否可以编辑

  2. 示例代码

       class UserInfo(models.Model):
           create_date = models.DateTimeField('注册时间', auto_now_add=True, editable=True)
    

5、help_text

  1. 说明

    Admin中该字段的提示信息

  2. 示例代码

     class UserInfo(models.Model):
         create_date = models.DateTimeField('注册时间', auto_now_add=True, editable=True,help_text='填写注册时间')
    

6、error_messages

  1. 说明

    自定义错误信息(字典类型),从而定制想要显示的错误信息

    字典健:null, blank, invalid, invalid_choice, unique等

  2. 示例代码

    {'null': "不能为空.", 'invalid': '格式错误'}
    

7、validators

  1. 说明

    自定义错误验证(列表类型),从而定制想要的验证规则

  2. 示例代码

    from django.core.validators import RegexValidator
    from django.core.validators import EmailValidator, URLValidator, DecimalValidator, MaxLengthValidator, MinLengthValidator, MaxValueValidator, MinValueValidator
    
        test = models.CharField(
            max_length=32,
            error_messages={
                'error1': '错误信息1',
                'error2': '错误信息2',
                'error3': '错误信息3',
            },
            validators=[
                RegexValidator(regex='\d+', message='错误了', code='error1'),
                RegexValidator(regex='\d+', message='又错误了', code='error2'),
                EmailValidator(message='又错误了', code='error3'), ]
        )
    

猜你喜欢

转载自blog.csdn.net/qq_28452411/article/details/86544530