ORM常用字段

发布于 2019-10-26 17:53:07   阅读量 206  点赞 0  

  Django的ORM模型的使用类的属性来映射表的字段,其中每个属性都是一个模型类的实例。 @[toc]

一、常用字段

1.AutoField

  映射到数据库中是int类型,自动自动递增的特性。如果不指定主键,则模型会自动生成一个名为id的AutoField的字段;若想自己指定一个其他名字且自动递增的主键,可以使用AutoField

2.BigAutoField

  64位的整型,类似于AutoField,之u过产生数据的范围为 1-9223372036854775807。

3.BooleanField

  在模型层接收的是True/False,在数据库层面是tinyint类型,若没有指定默认值,则默认为None

4.IntegerField

  整型,大小范围是-2147483648——2147483647。

5.BigIntergerField

  大整型,大小范围是-9223372036854775808——9223372036854775807。

6.SmallIntergerField

  小整型大小范围是-32768——32767。

7.PositiveIntegerField

  正整型(非无符号整型),大小范围是0——2147483647。

8.FloatField

  浮点类型,映射到数据库中是float类型。

9.CharField

  在python层面是普通字符串,在数据库层面是varchar类型。使用这个类型的时候必须要指定最大长度,也即必须传递max_length关键字参数。

10.TextField

  大文本类型,映射到数据库中是longtext类型,可理解为长度无限的字符串。

11.TimeField

  时间类型,在python中是datetime.time类型,在数据库中是time类型。用来记录时间。

12.DateField

  日期类型。在python中是datetime.date类型,映射打数据库中是date类型,可以记录年月日。使用这个Field的时候可以传递以下几个参数:

  1. auto_now:在每次该条数据保存的时候,都使用当前时间,该参数值为True/False。可以用来记录数据修改日期。
  2. auto_now_add:在每次数据第一次被添加进去的时候,都使用当前时间,参数值同样为True/False,可用于记录第一次入库时间。

13.DateTimeField

  日期时间类型,类似于DateField。不仅存储日期,还存储时间。映射到数据库中是datetime类型。这个Field也有auto_nowauto_now_add两个属性。

14.EmailField

  类似于CharField,在数据库底层是一个varchar类型,最大长度是254个字符。

EmailField在数据库层面不会限制字符串一定要满足邮箱格式,只是在使用ModelForm等表单相关操作时会起作用。即EmailField仍可存储任意的字符串数据。

15.URLField

  类似于CharField,只不过只能用来存储url格式饿字符串,且默认max_length是200。

16.FileField

  用来存储文件,详见文件上传。

17.ImageField

  用来存储图片文件,详见图片上传。

18.UUIDField

  只能存储uuid格式的字符串。uuid是一个32位的全球唯一的字符串,一般用来做主键。

   

二、Field常用参数

1.null

  默认为False。若设为True,则数据库中相应字段可为null;若设为False,则对应字段不可为null。在使用字符串相关的Field的时候,尽量不要使用这个参数值,也就是保持默认值False。因为Django在处理字符串相关的Field的时候,即使这个Field的null=True,若没有给这个Field传递任何值,那么Django会存储一个空字符串""进去。因此若再让其他字段的null=True,Django则会产生两种空值的情况(null与空字符串)。若在表单验证的时候允许该字符串为空,则建议再使用blank=True。(参数null是相对于数据库层面而言的,而blank是相对于前端表单验证而言的)。

2.blank

  标识这个字段在表单验证的时候是否能传入空字符串,默认为False

null区别:null是一个纯数据库级别的判断;而blank是基于表单验证级别的。

3.db_column

  定义字段在数据库中的名字。若没有设置这个参数,则会使用模型中的属性名为字段名。

4.max_length

  指定字符串数据的最大长度。

5.default

  字段的默认值。可为一个值或一个函数,但不支持lambda表达式。且不支持列表/字典/集合等可变的数据结构。

default的值可为一个函数,每次生成数据的时候都会默认调用该函数。且使用的都是default=函数名的方式,不能加括号,否则default的值都是函数的返回值。

6.primary_key

  是否作为主键。默认是False

7.unique

  表中字段的值是否唯一。一般用作设置账号等。

8.choices

  接受一个元组,其内的值也为元组(确保值不可变),以限制该字段的值的可选范围。其中每个资源组的形式为(value,display_name),其中value为可选的值,display_name为该值的解释,通过在实例对象上调用.get_字段名_display()方法能够得到对应的display_name。  *示例代码:*

class User(models.Model):
    POSITION_LIST = (
        (1,"regular user"),
        (2, "vip"),
        (3, "svip"),
        (4, "admin"),
    )
    position = models.IntegerField(choices=POSITION_LIST)
        ...

则对于position字段为2的User实例调用get_position_display()方法,能够得到字符串 "vip"。

   

三、Meta配置

  对于模型级别的配置,可以在类中再定义一个名为Meta的嵌套类,然后在Meta类中添加一些类属性来控制模型。比如想要在数据库映射的时候使用自己指定的表名而非默认生成的名字,可在Meta类中添加一个名为db_table的属性。 *示例代码:*

class Book(models.Model):
    name = models.CharField(max_length=20,null=False)
    desc = models.CharField(max_length=100,db_column="description")
    pub_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'book_model'
        ordering = ['pub_date']

常用属性:

1.db_table

 指定本模型映射到数据库中的表名,若没有指定这个参数,则在映射的时候会使用app_model作为默认的表名。

指定字段名:在定义字段的时候传入db_column参数;

指定表名:在Meta嵌套类中指定属性db_table的值。

2.ordering

 设置在返回记录结果集是按哪个字段排序的。其为一个字符串元组或列表,字符串的位置表明了排序的优先级。每一个字符串都是由一个字段名和一个可选的表明降序的 '-' 构成。当字段名前没有负号时,则使用升序排序。


Last Modified : 2020-03-09 17:53:07