• Django框架(五):模型(一) 定义属性


    1. 定义属性

    Django根据属性的类型确定以下信息:

    • 当前选择的数据库支持字段的类型
    • 渲染管理表单时使用的默认html控件
    • 在管理站点最低限度的验证

    django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

    默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

    pk是主键的别名,若主键名为id2,那么pk是id2的别名。

    属性命名限制:

    • 不能是python的保留关键字。
    • 不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询。
    • 定义属性时需要指定字段类型,通过字段类型的参数指定选项。

    前面已经简单的使用过了,只是没有详细介绍,语法:

    属性=models.字段类型(选项)

    1.1 字段类型

    (1) AutoField

    自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。

    自定义一个主键:

    my_id=models.AutoField(primary_key=True)

    (2) BooleanField

    布尔字段,值为True或False。

    (3) NullBooleanField

    类似BooleanField,支持Null、True、False三种值。

    (4) CharField(max_length=字符长度)

    字符串。

    参数max_length表示最大字符个数。

    (5) TextField

    大文本字段,一般超过4000个字符时使用。

    (6) IntegerField

    整数。

    (7) DecimalField(max_digits=None, decimal_places=None)

    十进制浮点数。

    参数max_digits表示总位数。

    参数decimal_places表示小数位数。

    (8) FloatField

    浮点数。

    (9) DateField[auto_now=False, auto_now_add=False])

    日期。

    参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。

    参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。

    参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。

    (10) TimeField

    时间,参数同DateField。

    (11) DateTimeField

    日期时间,参数同DateField。

    (12) FileField

    上传文件字段。

    参数:upload_to,一个用于保存上传文件的本地文件系统路径。

    (13) ImageField

    继承于FileField,对上传的内容进行校验,确保是有效的图片。

    有两个可选参数:height_field和width_field。将图片按照提供的高度和宽度规格保存。

    (14) CommaSeparatedIntegerField(max_length)

    逗号分隔开的整数字段。

    参数与CharField一样。

    (15) FilePathField(path,[match],[recursive])

    拥有多个可选项的字段,选项被限定为文件系统中某个目录下的文件名。

    (16) EmailField

    能检查值是否是有效的电子邮件地址的CharField。

    (17) IPAddressField

    IP地址,以字符串格式表示。

    例如:"192.168.0.1"

    (18) PhoneNumberField

    检查值是否是一个合法的美式电话格式。

    (19) PositiveIntegerField

    和IntegerField类似,但是必须是正值。

    (20) SlugField

    内容简短的标签,这段内容只能包含字母、数字、下划线或连字符。通常用于URL中。

    (21) SmallIntegerField

    和IntegerField类似,但是只允许在一个数据库相关的范围内的数值(通常是-32,768到+32,767)

    (22) URLField

    用来存储URL的字段。

    (23) USStateField

    美国州名字缩写,两个字母。

    (24) XMLField(schema_path)

    类似TextField,只不过要检查值是否匹配指定schema的合法XML。

    1.2 选项

    通过选项实现对字段的约束。

    null:如果为True,表示允许为空,默认值是False。

    blank:如果为True,则该字段允许为空白,默认值是False。

    要注意,这与 null 不同。null纯粹是数据库范畴的,而blank是数据验证范畴的。

    如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。

    db_column:字段的名称,如果未指定,则使用属性的名称。

    db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。

    default:默认值。

    primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。

    unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

    choices:一个包含双元素元组的可迭代的对象,用于给字段提供选项。

    editable:如果为False,这个字段在管理界面或表单里将不能编辑。默认为True。

    help_text:在管理界面表单对象里显示在字段下面的额外帮助文本。

    radio_admin:默认的,对于ForeignKey或者拥有choices设置的字段,Django管理界面会使用列表选择框(<select>)。如果radio_admin设置为True的话,Django就会使用单选按钮界面。

    unique_for_date:把它的值设成一个DateField或者DateTimeField的字段的名称,可以确保字段在这个日期内不会出现重复值。

    unique_for_month:和unique_for_date类似,只是要求字段在指定字段的月份内唯一。

    unique_for_year:和unique_for_date以及unique_for_month类似,只是时间范围变成了一年。

    verbose_name:除ForeignKey、ManaToManyField和OneToOneField之外的字段都接受一个详细名称作为第一个位置参数。

    1.3 简单演示

    #图书类
    class BookInfo(models.Model):
        '''图书模型类'''
        # 图书名称
        btitle = models.CharField(max_length=20, db_column='title')
        # 图书名字唯一
        # btitle = models.CharField(max_length=20, unique=True, db_index=True)
        # 价格,最大位数为10,小数为2
        # bprice = models.DecimalField(max_digits=10, decimal_places=2)
        # 出版日期
        bpub_date = models.DateField()
        # bpub_date = models.DateField(auto_now_add=True) # 创建时间
        # bpub_date = models.DateField(auto_now=True) # 更新时间
        # 阅读量
        bread = models.IntegerField(default=0)
        # 评论量
        bcomment = models.IntegerField(default=0)
        # 删除标记
        isDelete = models.BooleanField(default=False)
    
    class RoleInfo(models.Model):
        '''角色人物模型类'''
        # 角色名
        rname = models.CharField(max_length=20)
        # 性别
        rgender = models.BooleanField(default=False)
        # 描述信息
        rcomment = models.CharField(max_length=200, null=True, blank=False)
        # 关系属性
        rbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE)
        # 删除标记
        isDelete = models.BooleanField(default=False)
  • 相关阅读:
    Java与Http协议
    android之VideoView和视频播放View的扩展
    Android之SurfaceView实现视频播放
    AchartEngineActivity引擎绘制柱状图、曲线图
    Android消息推送
    字符串如何排序
    Java内部类总结
    利用反射机制实现工厂设计模式的高扩展性
    Java反射机制
    android AsyncTask介绍
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12200525.html
Copyright © 2020-2023  润新知