Django 字段

Django 字段,字段是模型的最重要组成部分,它是一系列数据表列的定义。模型字段是模型的类属性,它的命名不能与模型接口相同,如不能定义名为clean、save、delete的字段,同时字段名字中不能出现连续的两个下画线,因为连续两个下画线是Django数据库API的特殊语法。

每一个模型字段类型都对应一种数据库存储格式以及HTML元素。

为了支持不同的数据库,Django提供了几十种字段类型,常用的有以下几种。

  1. AutoField
    IntegerField的改进形式,字段值根据已有的ID自动增长,常用作主键。一般情况下Django已经帮你自动创建了。

  2. BigAutoField
    与AutoField相似,不过BigAutoField使用64位整型存储数据,取值范围从1至9223372036854775807。

  3. BooleanField
    字段值只包含True和False。类似于SQL Server中的bit类型。默认情况下,BooleanField对应HTML的复选框:<input type="checkbox" ...>。如果没有设置Field.default属性,那么它的默认值是None。

  4. CharField
    字符串类型,用于保存不太长的字符串。使用该字段必须要给出CharField.max_length,该属性指定了CharField所能接收的最大字符数,也用于字段有效性验证。默认情况下,CharField对应HTML的文本框:<input type="text" ...>

在这里要注意由于不同数据库对字符串字段的大小限制不一样,所以在设置max_length的时候要考虑自己的数据库特性。

对于超长的字符串,建议使用TextField类型。

  1. DateField
    日期类型,对应Python中的datetime.date类型。该字段类型包含以下几个可选参数。

DateField.auto_now,如果指定了该属性,那么每当保存数据时都会将该字段值更新为当前时间。不像默认值,标记为auto_now的字段值是不能被重写的。只有在Model.Save()的时候才会被更新。

DateField.auto_now_add,与auto_now类似,不过只有当该行数据第一次创建时才会保存当前时间。不像默认值,标记为auto_now_add的字段值是不能被重写的。

如果将日期类型字段的auto_now或者auto_now_add属性设置为True,那么字段的editable属性会被自动设置为False,同时blank属性会被自动设置为True。

auto_now、auto_now_add和default三个参数只能单独存在,不能搭配设置,否则会引起异常。

auto_now、auto_now_add属性总是使用TIME_ZONE中设置的时区保存时间,如果想使用其他时区,则不应该设置这两个属性。

示例:

date_field = models.DateField(default=datetime.datetime.now())

显示效果如图所示。
Django 字段

单击日历图表后,弹出日历控件,如图所示。
Django 字段

  1. DateTimeField
    日期时间类型,对应Python中的datetime.datetime类型。与DateField一样,包含两个额外参数auto_now和auto_now_add。

默认情况下,DateTimeField对应HTML的文本框:<input type="text" ...>,在Admin后台页面则使用两个文本框显示DateTimeField字段。
示例:

date_time_field = models.DateTimeField(default=datetime.datetime.now())

显示效果如图所示。
Django 字段

单击钟表图表后,弹出预设时间选择控件,如图所示。
Django 字段

  1. DecimalField
    指定小数位数的数值类型,对应Python的Decimal类型。

该字段类型包含两个必要参数:

DecimalField.max_digits,数值的总位数,例如123.45就是5位。
DecimalField.decimal_places,小数点后位数。

例如,设置一个字段的最大值为999,同时包含两位小数:

models.DecimalField(max_digits=5, decimal_places=2)

DecimalField对应HTML的文本框:<input type="number" ...>
示例:

decimal_field = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)

显示效果如图所示。
Django 字段

  1. EmailField
    本质就是CharField,不过会验证输入的字符串是不是一个有效的邮件地址。
    示例:
email_field = models.EmailField(default='test@test.com')

显示效果如图所示。
Django 字段

  1. FileField
    文件上传控件。
    该字段不允许使用primary_key属性。包含两个可选参数:
    FileField.upload_to,文件上传后的保存位置,例如:
class MyModel(models.Model):
    # 文件上传到MEDIA_ROOT/uploads
    upload = models.FileField(upload_to='uploads')
    # 文件上传到MEDIA_ROOT/uploads/2017/12/30
    upload = models.FileField(upload_to='uploads/%Y/%m/%d')

注意
MEDIA_ROOT在settings.py中设置,upload_to所指定的路径将会拼接在MEDIA_ ROOT之后。

FileField.storage,负责文件存储的Python类,用于存储和提取文件,类django.core. files.storage.FileSystemStorage提供了基本的文件管理功能。例如下面代码,无论在settings. py里面如何设置MEDIA_ROOT都会按照fs所指定的路径存储被上传的文件:

frome django.db import models
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location='/media/documents')

class Car(models.Model):
    ...
    photo = models.FileField(storage=fs)
    # FileField 对应HTML文件上传控件: <input type="file" ...>

示例:

file_Field = models.FileField(upload_to=' file_ field')

显示效果如图所示。
Django 字段

  1. FilePathField
    文件列表显示字段,该字段接收一个必选参数以及一个可选参数。
  • 必选参数:
    FilePathField.path,当前路径下的文件将会显示在下拉列表中。注意路径分隔符是“/”。

  • 可选参数:
    FilePathField.match,一段正则表达式,用于过滤FilePathField.path中的文件,注意该正则表达式只能过滤文件名,不能过滤路径。

FilePathField.recursive,参数值为True或False。当参数设置为True时,FilePathField. path的子文件夹中符合条件的文件也会显示在下拉列表中,否则只显示当前文件夹中的文件,默认值为True。

FilePathField.allow_files,参数值为True或False。

可以从下面目录结构查看FilePathField显示效果:
Django 字段

示例1:

file_path_field = models.FilePathField(path='D:/File/ file_path', match='.jpg$',
    recursive=False, allow_ files=True, allow_folders=False)

显示效果如图所示。
Django 字段

示例2:

file_path_field = models.FilePathField(path='D:/File/file_path', match='.jpg$',
    recursive=True, allow_files=True, allow_folders=False)

显示效果如图所示。
Django 字段

注意
(1) 文件的绝对路径会显示在HTML代码中,会导致一定的安全隐患,因此需要谨慎使用FilePathField对象。
(2) FilePathField在数据库中使用varchar类型存储,默认最大长度为100字符。

  1. FloatField
    浮点数类型,对应Python的float类型。

  2. ImageFIeld
    包含FileField字段的全部属性与方法,但是仅允许上传图片类型文件。
    为了设置图片显示的高度与宽度,ImageField字段额外提供两个属性:
    ImageField.height_field,图片高度。
    ImageField.width_field,图片宽度。

  3. IntegerField
    整数字段,取值范围:-2147483648~2147483647。对于所有Django支持的数据库来说都是安全的。

  4. PositiveIntegerField
    正整数类型,取值范围:0~2147483647。

  5. PositiveSmallIntegerField
    小正整数类型,取值范围:0~32767。

  6. SlugField
    Slug是用于新闻业的专业名词,slug是一个简短的文本,只允许包含字母、数字、下画线和连字符。与CharField相似,可以指定max_length属性,如果没有显式地给出max_ length值,默认值为50。

如果想在SlugField字段中使用除ASCII之外的其他Unicode字符,可以将属性SlugField.allow_unicode设置为True。

  1. SmallIntegerField
    小整数类型,取值范围:-32768~32767

  2. TextField
    超长文本类型。
    示例:

text_field = models.TextField(default='')

显示效果如图所示。
Django 字段

  1. TimeField
    时间类型,对应datetime.time。

  2. URLField
    CharField类型,只能接收URL字符串,默认最大长度是200字符。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!