Django中模型的字段、参数、元类

文章目录


一、模型常用字段

1. models.AutoField()

models.AutoField() —自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键primary_key=True。

2. models.CharField(max_length=‘最大长度’)

models.CharField() —字符串字段 单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length=‘最大长度’ 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。

3. models.BooleanField()

models.BooleanField() —布尔类型=tinyint(1) 不能为空,此字段默认表单控件是CheckboxInput

4. models.ComaSeparatedIntegerField()

models.ComaSeparatedIntegerField() —用逗号分割的数字=varchar 继承CharField,所以必须 max_lenght 参数,

5. models.DateField()

models.DateField() —日期类型 date 对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。

2. models.DateTimeField()

models.DateTimeField() —日期类型 datetime 同DateField的参数,使用Python的datetime.datetime实例表示时间。

7. models.DecimalField(max_digits=‘总数位’,decimal_places=‘小数位’)

models.Decimal() —十进制小数类型 = decimal 必须指定总数位max_digits和小数位decimal_places

8. models.EmailField()

models.EmailField() —字符串类型(正则表达式邮箱) =varchar 对字符串进行正则表达式 一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。

9. models.FloatField(max_digits=‘总数位’,decimal_places=‘小数位’)

models.FloatField() —浮点类型 = double 浮点型字段。 必须提供两个 参数, 参数描述:
(1)max_digits:总位数(不包括小数点和符号)
(2)decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:models.FloatField(…,max_digits=19, decimal_places=10)

10. models.IntegerField()

models.IntegerField() —整形 用于保存一个整数

11. models.BigIntegerField()

models.BigIntegerField() —长整形
  integer_field_ranges = {
    ‘SmallIntegerField’: (-32768, 32767),
    ‘IntegerField’: (-2147483648, 2147483647),
    ‘BigIntegerField’: (-9223372036854775808, 9223372036854775807),
    ‘PositiveSmallIntegerField’: (0, 32767),
    ‘PositiveIntegerField’: (0, 2147483647),
  }

12. models.IPAddressField()

models.IPAddressField() —字符串类型(ip4正则表达式) 一个字符串形式的 IP 地址, (如 “202.1241.30″)。

13. models.GenericIPAddressField()

models.GenericIPAddressField() —字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置报错

14. models.NullBooleanField()

models.NullBooleanField() —允许为空的布尔类型 类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框 (三个可选择的值: “Unknown”, “Yes” 和 “No” ) 来表示这种字段数据。

15. models.PositiveIntegerField()

models.PositiveIntegerField() —正Integer 类似 IntegerField, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数)

16. models.PositiveSmallIntegerField()

models.PositiveSmallIntegerField() —正smallInteger 正小整型字段,类似 PositiveIntegerField, 取值范围较小(数据库相关)SlugField“Slug” 是一个报纸术语。 slug 是某个东西的小小标记(短签), 只包含字母,数字,下划线和连字符。它们通常用于URLs。 若你使用 Django 开发版本,你可以指定 maxlength。 若 maxlength 未指定, Django 会使用默认长度: 50,它接受一个额外的参数:prepopulate_from: 来源于slug的自动预置列表

17. models.SlugField()

models.SlugField() —减号、下划线、字母、数字 它们通常用于URLs。

18. models.SmallIntegerField()

models.SmallIntegerField() —数字 数据库中的字段有:tinyint、smallint、int、bigint. 类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)

19. models.TextField()

models.TextField() —字符串=longtext ,一个容量很大(超过4000字符)的文本字段, 默认表单控件是Textarea ,admin 管理界面用 多行编辑框表示该字段数据。

20. models.TimeField()

models.TimeField() —时间 HH:MM[:ss[.uuuuuu]] 时间字段,类似于 DateField 和 DateTimeField。使用Python的datetime.time实例表示时间。

21. models.URLField()

models.URLField() —字符串,地址正则表达式 用于保存URL。若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应).

22. models.BinaryField()

models.BinaryField() —二进制

23. models.ImageField()

models.ImageField() —图片 类似 FileField, 不过要校验上传对象是否是一个合法图片。它有两个可选参数:height_field 和 width_field,如果提供这两个参数,则图片将按提供的高度和宽度规格保存。该字段要求 Python Imaging 库。

24. models.FilePathField()

models.FilePathField() —选择指定目录按限制规则选择文件,有三个参数可选, 其中”path”必需的,这三个参数可以同时使用, 参数描述:
(1)path:必需参数,一个目录的绝对文件系统路径。 FilePathField 据此得到可选项目。 Example: “/home/images”;
(2)match:可选参数, 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名。 注意这个正则表达式只会应用到 base filename 而不是路径全名。 Example: “foo。*\。txt^”, 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif;
(3)recursive:可选参数, 是否包括 path 下全部子目录,True 或 False,默认值为 False。

match 仅应用于 base filename, 而不是路径全名。
如:FilePathField(path=”/home/images”, match=”foo.*”,recursive=True)…会匹配/home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

二、模型字段常用参数

1. null

null=True
数据库中字段是否可以为空

2. blank

blank=True
django的 Admin 中添加数据时是否可允许空值

3. primary_key

primary_key = True
主键,对AutoField设置主键后,就会代替原来的自增 id 列

4. auto_now 和 auto_now_add

auto_now 自动创建—无论添加或修改,都是当前操作的时间
auto_now_add 自动创建—永远是创建时的时间

5. choices

choices

GENDER_CHOICE = (
	(u'M', u'Male'),
	(u'F', u'Female'),
)
#这里我们用在内存创建一个关联,来取代再创建一个简单的表来关联
gender = models.CharField(max_length=2,choices = GENDER_CHOICE) 

6. max_length

max_length 最大长度

7. default

default 默认值

8. verbose_name

verbose_name  Admin中字段的显示名称

9. name|db_column

name|db_column  数据库中的字段名称

10. unique

unique=True  不允许重复
例如用户名注册时候是不允许重复的,在username字段里设置,不让重复

11. db_index

db_index = True  数据库索引,在此表中为此字段创建索引

12. editable

editable=True  在Admin里是否可编辑

13. error_messages

error_messages=None  错误提示

 #把错误提示修改成你想要的报错,这里加个字典来完成 
gender = models.CharField(max_length=2,choices = GENDER_CHOICE,error_messages={"错误类型":"错误原因"})

14. auto_created

auto_created=False  自动创建

15. help_text

help_text  在Admin中提示帮助信息

16. validators

validators=[] 提示区间,例如电话号码范围

三、模型中元选项 (Meta类)

1、abstract: 标识本类是否为抽象基类True or False

2、app_label: 定义本类所属的应用

3、db_table: 映射的数据库表名,

例如: db_table=‘moments’如果在Meta中不提供 db_table 字段,则Django 会为模型自动生成数据表名,生成的格式为“应用名_模型名”,例如:应用app的模型 Comment 的默认数据表名为 app_comment

4、db_tablespace: 映射的表空间名称表空间的概念只在某些数据库如 Oracle 中存在,不存在表空间的概念的数据库将忽略此字段

5、default_related_name: 定义本模型的反向关系引用名称,默认与模型名一致

6、get_latest_by: 定义按哪个字段值排列以获得模型的开始或结束记录本属性值通常指向一个日期或整型的模型字段

7、managed: True or False定义 Django的 manage.py 命令行工具是否管理本模型。默认为 True,若将其设置为 False,则运行 python manage.py migrate 时将不会在数据库中生成本模型的数据表,所以需要手工维护数据库的定义

8、order_with_respect_to: 定义本模型可以按照某外键引用的关系排序

9、order: 本模型记录的默认排序字段,可以设置多个字段,默认以升序排列,若以降序排列则表示要在字段名前加负号(“-”)

例如:定义 user_name 字段升序 和 pub_date 降序排列
order = [‘user_name’,‘-pub_date’]

10、dafault_permissions: 模型操作权限

默认为 default_permisstions=(‘add’,‘change’,‘delete’)

11、proxy"=: True or False本模型及所有继承自本模型的子模型是否为代理模型

12、required_db_features: 定义底层数据库所必须具备的特性

例如:required_db_features=[‘gis_enabled’]只将本数据模型生成在满足 gis_enabled 特性的数据库中

13、required_db_vendor: 定义底层数据库类型

比如 SQLite,PostgreSQL,MySQL,Oracle如果定义了本属性,则模型只能在其声明的数据库中被维护

14、unique_together: 用来设置的不重复的字段组合,必须唯一(可以将多个字段做联合唯一)

例如:unique_together = ((“user_name”,“pub_date”),)定义了每个 user_name 在同一个 pub_date 中只能有一条数据表记录因为 unique_together 本身是一个元组,所以可以设置多个这样的唯一约束

15、index_together: 定义联合索引的字段,可以设置多个

例如:index_together = [[“pub_date”,“deadline”],]

16、verbose_name: 指明一个易于理解和表述的单数形式的对象名称。如果这个值没有被设置,则Django将会使用该model的类型的分词形式作为它的对象表述名,即 CamelCase 将会被转换为camel case

17、verbose_name_plural: 指明一个易于理解和表述的复数形式的对象名称

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值