美文网首页
Django学习笔记:Models02 字段&字段参数

Django学习笔记:Models02 字段&字段参数

作者: Py_Bird | 来源:发表于2018-12-24 13:55 被阅读0次

    模型字段(常用)

    AutoField

    整数型自增字段,从1增加。一个类中只能有一个自增字段,且必须是主键。

    当用户未指定主键时,Django会自动添加主键:id = models.AutoField(primary_key = True)

     

    BooleanField

    布尔值型字段,默认值是None。

    默认为CheckboxInput标签

    CharField(max_length=n)

    字符串字段,max_length参数必须提供,限制字符串长度值,同时限制前端和模型、数据库的字符串长度。

    默认为input text标签

    DateField

    日期型字段,在admin后台自动添加一个日历表,以及附加日期合法性验证。

    auto_now_add=True/False:记录/不记录对象的创建时间(不可修改)

    auto_now=True/False:记录/不记录对象的修改时间

    默认为TextInput标签

    DateTimeField

    日期型字段,比DateField增加显示小时、分钟、秒

    EmailField

    邮箱类型,默认最大长度max_length=254,可以使用Django内置的EmailValidator进行邮箱地址的合法性验证。

     

    FileField

    上传文件类型,将文件的上传路径以相对路径字符串形式保存在数据库内(默认最大长度max_length=100,可调),而真实文件保存在服务器的文件系统中。该字段不能设为主键。

    upload_to=’xxx/’:上传地址的相对路径名,可以接收字符串,也可以接收一个回调函数,回调函数必须接收两个参数,并返回路径的字符串。

    文件上传位置:MEDIA_ROOT的主路径/upload_to的相对路径。

    默认为ClearableFileInput标签

    FilePathField(path=xxx)

    保存文件路径型字段,上传文件的路径字符串保存在数据库内(字符串默认最大长度max_length=100,可调),真实文件保存在服务器的文件系统中。该字段不能设为主键。

    path参数必须提供,表示系统绝对路径。

    match=’<正则表达式>’,用于匹配文件名

    recursive=False/True,不包含/包含子目录

    allow_files=True/False,决定match匹配/不匹配文件名

    allow_floders=False/True,决定match不匹配/匹配目录名

    ImageField

    上传图像类型,将图片的上传路径以相对路径字符串形式保存在数据库内(默认最大长度max_length=100,可调),而真实图片保存在服务器的文件系统中。该字段不能设为主键。

    height_field=n,保存图片高度信息

    width_field=n,保存图片宽度信息

    使用前需要先安装pillow模块,pip install pillow

    默认为ClearableFileInput标签

    MEDIA的上传配置:

    ①在settings.py文件中,配置MEDIA_URL = ‘/media/’,作为访问的URL;

    再配置MEDIA_ROOT = os.path.join(BASE_DIR,‘media’),作为上传文件在服务器中的路径。

    # MEDIA_ROOT只能配置一个,STATICFILES_DIRS可配置多个

    ②在FileField或ImageField字段中定义upload_to=’xxx’,可用%Y表示年份,%m表示月份,对文件夹进行命名;上传的文件放在MEDIA_ROOT目录下的upload_to目录。

    MEDIA的模板访问方法一:

    ①配置media处理链接,在urls.py中:

    from django.views.static imort serve

    from ... import MEDIA_ROOT

    url_patterns = [

    url(r’^media/(?P<path>.*)$’, serve, {‘document_root’: MEDIA_ROOT} ),

    ]

    # serve(request, path, document_root, show_indexes=False)函数会传入document_root的文件

    ②模板中访问图片/文件的路径:{{ <对象>.<图片/文件字段>.url }}

      模板中访问图片/文件的名称:{{ <对象>.<图片/文件字段>.name }}

      模板中访问图片/文件的大小:{{ <对象>.<图片/文件字段>.size }}

    MEDIA的模板访问方法二:

    ①配置media处理链接,在urls.py中:

    from django.views.static imort serve

    from ... import MEDIA_ROOT

    url_patterns = [

        url(r’^media/(?P<path>.*)$’, serve, {‘document_root’: MEDIA_ROOT} ),

    ]

    ②添加MEDIA处理类,在settings.py > TEMPLATES > OPTIONS > context_processors中:

    'django.template.context_processors.media',

    它会将模板中的{{ MEDIA_URL }}转换成settings.py中的MEDIA_URL配置路径。

    ③模板中访问:{{ MEDIA_URL }}{{ <对象>.<图片/文件字段> }}

    GenericIPAddressField

    IPV4或IPV6地址,字符串形式。

    默认为TextInput标签

    IntegerField

    整数类型字段,-2147483648~2147483647。

    默认为NumberInput标签

    TextField

    大段的字符型字段,max_length参数用来限制前端输入层面,不限制模型和数据库层面。

    默认为Textarea标签

    URLField

    保存url地址的字符串型字段,默认最大长度max_length=200。

     

     

     

    模型字段参数

    blank=False

    是表单验证层面的,用来验证输入框是否允许内容为空,默认为False。

    null=False

    是数据库层面的,默认为False,表示数据库不用NULL存储空值,当为True时,数据库用NULL存储空值。

    如果一个blank=True, null=False的字段接收到空值,可能出现bug或异常。

    choices=((’xx’, ’oo’), (’xx’, ’oo’), ...)

    一个页面上的下拉型选择框,传入一个二维元组,内部二元元组的第一个值显示在前端页面,传递在url/?name=value的value、使用在views函数的参数;二元元组的第二个值显示在Admin后台,当templates或view引用时可以用<实例>.get__display()获得。

    #在CharField中使用时,传入的元组是两个字符串(‘xx‘, ‘xxx‘);在IntegerField中使用时,传入的元组是数字和字符串(1, ‘xxx’)

    db_colunm= 

    定义该字段在数据表中的列名,默认用字段名作为列名。

    db_index=False

    默认为False,数据库不为当前字段创建索引,当为True时,数据库创建索引。

    default= 

    设置字段的默认值,可传入一个值或一个可调用对象,如果是可调用对象,每次创建新对象时都会调用。不能传入列表、集合等可变对象,不能传入lambda匿名函数。

    editable=True

    默认为True,当为False时,当前字段不在admin后台或其他表单中显示,还会被模型验证功能跳过。

    error_messages={ }

    用于自定义错误信息,传入字典类型值,字典的key可以是null、blank、invalid、invalid_choice、unique、unique_for_date中的一个。

    primary_key=True

    将该字段设为主键,同时关闭Django自动生成id的功能。

    如果不设置主键,Django将自动创建一个AutoField自增字段并设为主键,即:

    id = models.AutoField(primary_key=True)

    隐含参数:null=False, Unique=True

    unique=True

    当为True时,该字段的数据在整个数据表内不可重复。

    unique_for_date= 

    使该字段对象的日期唯一,如果有一个名为title的字段并设置了unique_for_date="pub_date",那么Django不允许有两个模型对象具备同样的title和pub_date。

    unique_for_month= 

    同上,月份唯一。

    unique_for_year= 

    同上,年份唯一。

    verbose_name=’ ‘

    为字段设置一个友好的别名,显示在Admin后台中,默认在第一参数位置。如:

    first_name = models.CharField(“姓氏”, max_length=30)

    当不设置verbose_name时,Django默认用字段名作为别名,并将其中的下划线转换为空格。

    当第一位置参数被ForeignKey、ManyToManyField、OneToOneField占用时,要显式的指定verbose_name=’xxx’。

    相关文章

      网友评论

          本文标题:Django学习笔记:Models02 字段&字段参数

          本文链接:https://www.haomeiwen.com/subject/uefzkqtx.html