• ORM(四)Field options


    null:当null=True,如果数据库中该字段没有值(不包括空字符串),则系统默认将该字段填充NULL。

    当null=False(默认为False),如果数据库中该字段没有值(不包括空字符串),则该字段可以为空。

    当数据库中该字段设置了unique=True和blank=True时,该字段null=True而不能是Fale,这样可以避免多次插入数据时造成unique唯一冲突。

    blank:注意,这与上面的null不同。null是控制数据库中的字段,而blank是控制前端form表单。

    如果字段为blank=True,则表单验证将允许输入空值。如果字段为blank=False,则该字段必须填写。

    db_column:用于此字段的数据库列的名称。如果没有给出,Django将使用字段的名称。

    db_index:如果db_index=True,则允许创建该字段为索引。

    db_tablespace:如果此字段是索引,则db_tablespace的值将应用于此字段索引的数据库表空间的名称。系统默认使用工程项目settings中的DEFAULT_INDEX_TABLESPACE。如果后端数据库不支持数据库表空间可以忽略此项。

    default:为字段设置默认值,这个值可以是一个对象,但每次调用这个对象时都会重新创建一个对象。

    官方说default的值不能是可变对象(如model instance、list、set等),如果要使用这些可变的对象使用函数调用的方式来实现,如(官方示例):

    def contact_default():
        return {"email": "to1@example.com"}
    
    contact_info = JSONField("ContactInfo", default=contact_default)

    但测试发现default=list,dict,set完全没问题,不清楚原因。

    primary_key:primary_key=True将该字段设为主键。

    unique:unique=True设置该字段值在表中是唯一的,不能重复。

    unique_for_date:将该字段日期(DateField、DateTimeField)设置为唯一不能重复。

    unique_for_year:将该字段年份(DateField、DateTimeField)设置为唯一不能重复。

    unique_for_moth:将该字段月份(DateField、DateTimeField)设置为唯一不能重复。

    verbose_name:对字段进行描述,一般用于显示时的title、表头等,如果不写该字段,默认verbose_name=该字段名。

    如:first_name = models.CharField(max_length=30)   中默认verbose_name='first_name'。

    choices:是一个可迭代对象(list或者tuple)如果参数2个以上(如:[(A, B), (A, B) ...]),则该字段默认前端form组件的select选择框,而不把它当成是一个文本字段。

    如下官方示例:

    from django.db import models
    
    class Student(models.Model):
        FRESHMAN = 'FR'
        SOPHOMORE = 'SO'
        JUNIOR = 'JR'
        SENIOR = 'SR'
        YEAR_IN_SCHOOL_CHOICES = (
            (FRESHMAN, 'Freshman'),
            (SOPHOMORE, 'Sophomore'),
            (JUNIOR, 'Junior'),
            (SENIOR, 'Senior'),
        )
        year_in_school = models.CharField(
            max_length=2,
            choices=YEAR_IN_SCHOOL_CHOICES,
            default=FRESHMAN,
        )
    
        def is_upperclass(self):
            return self.year_in_school in (self.JUNIOR, self.SENIOR)

    显示选择框的内容,如:sex = models.IntegerField(choices=[(0, '女'),(1, '男'),],default=1),如果我们使用"对象.sex"的方式将只能获取0或者是1,而不能获取男或者女。可以使用“对象.get_sex_display”的方式来获取选项中的男或女。

    如下示例:

    from django.db import models
    class Person(models.Model):
        SHIRT_SIZES = (              # 定义choices的选项
            ('S', 'Small'),
            ('M', 'Medium'),
            ('L', 'Large'),
                         )
        name = models.CharField(max_length=60)
        shirt_size = models.CharField(max_length=1,choices=SHIRT_SIZES)  # 使用choices选项
    
    >>>from 项目_app.models import Person  # 在终端中导入模块
    >>> p = Person(name="Fred Flintstone", shirt_size="L")
    >>> p.save()
    >>> p.shirt_size   # 直接打印字段
    'L'
    
    >>> p.get_shirt_size_display()  # 使用对象.get_字段_display()的方式打印字段
    'Large' 

    关于上述示例,choices=SHIRT_SIZES,中SHIRT_SIZES的第一个元素的值将作为数据库中的值,第二个元素的值将被显示在form组件中。

    editable:如果editable=False,则该字段不会显示在admin 或者其它ModelForm中。默认为True。

    error_messages:自定义错误信息(字典类型),从而定制想要显示的错误信息;字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date

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

    参考文档:https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.Field.db_tablespace

  • 相关阅读:
    线程
    sqlite3数据库操作
    20、android解决方案(转载)
    19、android面试题整理(自己给自己充充电吧)
    18、ESC/POS指令集在android设备上使用实例(通过socket)
    17、android设备如何防止屏幕休眠(转载)
    16、根据年月日获取周几 以及整理的日期常用的工具类
    15、android 用toast实现简单的进度显示
    14、到底改如何区分android的平板、电视、手机
    13、主线程任务太多导致异常退出(The application may be doing too much work on its main thread)
  • 原文地址:https://www.cnblogs.com/caesar-id/p/10692390.html
Copyright © 2020-2023  润新知