zoukankan      html  css  js  c++  java
  • 4.model 字段

       

    一、字段名

       

    字段名

    类型

    参数

    AutoField(Field)

    - int自增列,

    必须填入参数 primary_key=True

    BigAutoField(AutoField)

    - bigint自增列

    必须填入参数 primary_key=True

    SmallIntegerField(IntegerField):

    SmallIntegerField(IntegerField):

      

    PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)

    - 正小整数 0 ~ 32767

      

    IntegerField(Field)

    - 整数列(有符号的) -2147483648 ~ 2147483647

      

    PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)

    - 正整数 0 ~ 2147483647

      

    BigIntegerField(IntegerField):

    - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

      

    BooleanField(Field)

    - 布尔值类型

      

    NullBooleanField(Field):

    - 可以为空的布尔值

      

    CharField(Field)

    - 字符类型

    - 必须提供max_length参数, max_length表示字符长度

    TextField(Field)

    - 文本类型

      

    EmailField(CharField):

    - 字符串类型,Django Admin以及ModelForm中提供验证机制

      

    GenericIPAddressField(Field)

    - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6

    - 参数:

    protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6" unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,

    开启刺功能,需要protocol="both"

    URLField(CharField)

    - 字符串类型,Django Admin以及ModelForm中提供验证 URL

      

    SlugField(CharField)

    - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)

      

    CommaSeparatedIntegerField(CharField)

    - 字符串类型,格式必须为逗号分割的数字

      

    UUIDField(Field)

    - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证

      

    FilePathField(Field)

    - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能

    - 参数:

    path, 文件夹路径 ,

    match=None, 正则匹配

    recursive=False, 递归下面的文件夹 allow_files=True, 允许文件 allow_folders=False, 允许文件夹

    FileField(Field)

    - 字符串,路径保存在数据库,文件上传到指定目录

    - 参数:

    upload_to = "" 上传文件的保存路径

    storage = None 存储组件,默认django.core.files.storage.FileSystemStorage

    ImageField(FileField)

    - 字符串,路径保存在数据库,文件上传到指定目录

    - 参数:

    upload_to = "" 上传文件的保存路径

    storage = None 存储组件,默认django.core.files.storage.FileSystemStorage width_field=None, 上传图片的高度保存的数据库字段名(字符串)

    height_field=None 上传图片的宽度保存的数据库字段名(字符串)

    DateTimeField(DateField)

    - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

      

    DateField(DateTimeCheckMixin, Field)

    - 日期格式 YYYY-MM-DD

      

    TimeField(DateTimeCheckMixin, Field)

    - 时间格式 HH:MM[:ss[.uuuuuu]]

      

    DurationField(Field)

    - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型

      

    FloatField(Field)

    - 浮点型

      

    DecimalField(Field)

    - 10进制小数

    - 参数:

    max_digits,小数总长度

    decimal_places,小数位长度

    BinaryField(Field)

    - 二进制类型

      

    注:当model中如果没有自增列,则自动会创建一个列名为id的列,自增列必须为主键,因为mysql一张表中只能有一个自增列。英文详解如下:

       

    'AutoField'

    'integer AUTO_INCREMENT',

    'BigAutoField'

    'bigint AUTO_INCREMENT',

    'BinaryField'

    'longblob',

    'BooleanField'

    'bool',

    'CharField'

    'varchar(%(max_length)s)',

    'CommaSeparatedIntegerField'

    'varchar(%(max_length)s)',

    'DateField'

    'date',

    'DateTimeField'

    'datetime',

    'DecimalField'

    'numeric(%(max_digits)s, %(decimal_places)s)',

    'DurationField'

    'bigint',

    'FileField'

    'varchar(%(max_length)s)',

    'FilePathField'

    'varchar(%(max_length)s)',

    'FloatField'

    'double precision',

    'IntegerField'

    'integer',

    'BigIntegerField'

    'bigint',

    'IPAddressField'

    'char(15)',

    'GenericIPAddressField'

    'char(39)',

    'NullBooleanField'

    'bool',

    'OneToOneField'

    'integer',

    'PositiveIntegerField'

    'integer UNSIGNED',

    'PositiveSmallIntegerField'

    'smallint UNSIGNED',

    'SlugField'

    'varchar(%(max_length)s)',

    'SmallIntegerField'

    'smallint',

    'TextField'

    'longtext',

    'TimeField'

    'time',

    'UUIDField'

    'char(32)',

       

    二、字段中常用参数

    null 数据库中字段是否可以为空,注意和blank比较

    db_column 数据库中字段的列名

    db_tablespace

    default 数据库中字段的默认值

    primary_key 数据库中字段是否为主键

    db_index 数据库中字段是否可以建立索引

    unique 数据库中字段是否可以建立唯一索引

    unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引

    unique_for_month 数据库中字段【月】部分是否可以建立唯一索引

    unique_for_year 数据库中字段【年】部分是否可以建立唯一索引

    verbose_name Admin中显示的字段名称

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

    editable Admin中是否可以编辑

    help_text Admin中该字段的提示信息

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

    如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

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

    字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date

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

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

       

    例子:

       

    from django.core.validators import EmailValidator

    from django.core.validators import RegexValidator

       

    test = models.CharField(

            max_length=32,

            error_messages={

                    'c1': '优先错信息1',

                    'c2': '优先错信息2',

                    'c3': '优先错信息3',

            },

            validators=[

                    RegexValidator(regex='root_d+', message='错误了', code='c1'),

                    RegexValidator(regex='root_112233d+', message='又错误了', code='c2'),

                    EmailValidator(message='又错误了', code='c3'), ])

       

    三、Meta信息:

    class Meta:

            # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名

            db_table = "table_name"

            # 联合索引

            index_together = [("pub_date", "deadline"), ]

            # 联合唯一索引

            unique_together = (("driver", "restaurant"),)

            # admin中显示的表名称

            verbose_name = "用名信息"

            # verbose_namesadmin中复数形式

            verbose_name_plural = verbose_name

    #定义排序规

    ordering = "-object_id" #通过object_id做到许排序。

       

    四、model字段格式检查

    1、触发Model中的验证和错误提示

    1Django Admin中的错误信息会优先根据Admin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息

    #model.py文件中

    class UserInfo(models.Model):

            nid = models.AutoField(primary_key=True)

            username = models.CharField(max_length=32)

            email = models.EmailField(error_messages={'invalid': '格式错了.'})

    这样就会提示格式错误

       

    2)调用Model对象的 clean_fields 方法

    # views.py

    def index(request):

            obj = models.UserInfo(username='11234', email='uu')

            try:

                    print(obj.clean_fields())

            except Exception as e:

                    print(e)

            return HttpResponse('ok')

    # Modelclean方法是一个钩子,可用于定制操作,如:上述的异常处理。

       

    3Admin中修改错误提示,(也即是用django的form方法)

    from django import forms

    from django.contrib import admin

    from model_club import models

       

    class UserInfoForm(forms.ModelForm):

            username = forms.CharField(error_messages={'required': '用户名不能为空.'})

            email = forms.EmailField(error_messages={'invalid': '邮箱格式错误.'})

            age = forms.IntegerField(initial=1, error_messages={'required': '请输入数值.', 'invalid': '年龄必须为数值.'})

       

            class Meta:

                    model = models.UserInfo

                    # fields = ('username',)

                    fields = "__all__"

       

    class UserInfoAdmin(admin.ModelAdmin):

            form = UserInfoForm

       

    admin.site.register(models.UserInfo, UserInfoAdmin)

       

       

       

       

       

       

  • 相关阅读:
    将一堆图片自适应页面排列
    用正则匹配富文本中的文本,并替换其内容
    实战
    从 defineProperty 到 Proxy
    CSS 实现蜂巢/六边形图集
    Umi 小白纪实(三)—— 震惊!路由竟然如此强大!
    无题
    贺文
    模型可解释性方法--lime
    多模态融合注记
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8975558.html
Copyright © 2011-2022 走看看