Django1.10常用Models的数据类型、参数以及关系

  • A+
所属分类:Django学习

官网上数据类型的太多了,但是作为一个菜鸟只去看常用的,而其他的等需要的时候再来聊,不过呢,官方的文档最好还是刷下(全选、复制、粘贴到翻译大概知道有哪些)。

按照我们常见的博客的来想一个:

首页需要:标题、关键词、描述、网址、邮箱、其他文字说明

分类需要:分类名称、分类别名、分类标题、分类关键词、分类描述、缩略图

内容页:标题、关键词、描述、发布时间、作者、发布内容、标签、缩略图、文件

 

根据上面我们来看分析需求:

首页需要:标题(文本)、关键词(文本)、描述(文本)、网址(网址)、邮箱(邮箱)、其他文字说明(多文本)

分类需要:分类名称(文本)、分类别名(文本)、分类标题(文本)、分类关键词(文本)、分类描述(文本)、缩略图(图片)

内容页:标题(文本)、关键词(文本)、描述(文本)、发布时间(时间)、作者(文本)、发布内容(多文本)、标签(文本)、图片(图片)、文件(文件)

筛选出来后,我们就只需要知道

文本、多文本、时间、网址、邮箱(这个是强加的)、图片、文件,还要增加一个ID,用于做区别每一篇内容。

https://www.lijinlong.cc/django/djxs/1980.html

https://www.lijinlong.cc/django/djxs/1977.html

 

数据类型

  • AutoField (ID用途)

上面网址中1980、1977通常是用这个来判断的,他的特点是自增长,就是不需要去定义他,默认他就有,这也是为了防止内容被覆盖了,来做区分。

  • CharField  (文本)

通常用于短文本内容的记录,在上面的需求分析中,也看到文本的需求量是很大,所以需要更深的掌握。

CharField有一个必须的参数,max_length,来限制输入的最大内容,超出内容就无法保存了。

  1. username = models.CharField(max_length=32)
  • TextField  (多文本)

用于记录大量的文字内容

  1. memo = models.TextField()
  • DateTimeField  (日期时间)

有两个参数,auto_now=False, auto_now_add=False默认两者都为False,当设置为auto_now=true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。

当auto_now_add=True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。

  1. pubdate = models.DateTimeField('发表时间',auto_now=False, auto_now_add=False)
  • URLField (网址)

判断输入的内容为网址,可选参数max_length。

  1. WebUrl = URLField(max_length=200)
  • EmailField (邮箱)

判断输入的内容为邮箱,可选参数max_length。

  1. WebEmail = EmailField(max_length=200)
  • ImageField (图片)

判断输入的内容是否为图片类型,目录为图片存储的位置,使用这两个ImageField和FileField字段的时候,要先配置项目的setting.py配置内容。

  1. MEDIA_URL = '/media/'
  2. MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

例:区别于文件类型,图片还支持height_field、width_field用途(自动填充图像的高度或宽度,不知道搞成的图片会不会被压缩,没有测试过。)

  1. ConPic = models.ImageField('缩略图', upload_to='目录')
  • FileField (文件)

上传文件,常用只是上传文件到目录,但是这个又是很危险的,比如说上传的py的执行文件。。。等等,所以更多的请去官方:https://docs.djangoproject.com/en/1.10/ref/models/fields/#filefield

  1. file = models.FileField(upload_to='目录')

查阅更多:https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types

补充

  • IntegerField (整数字段)

例:用于排序使用

  1. index = models.IntegerField(default=100)

 

数据库参数

  • null ,默认为null = False ,如是True则将空值定义为NULL
  • blank,默认为blank = False,,如是True则允许内容为空(通常表现为*号为必须输入,而当True时,则可以不输入任何内容)
  • choices,选择项
    1. Address_Data = (
    2.     ('省份', '江苏'),
    3.     ('市区', '淮安'),
    4. )
    5. Address_Choices = models.CharField(choices=Address_Data)
  • editable , 在后台是否可编辑,默认为True
  • help_text , 帮助内容
  • verbose_name,数据库在后台的名称,在上面的代码中有出现,只是为了偷懒,所以放在第一位,则免去了写这个参数的名称。
  • unique,默认为False,如为True,则输入的数据信息是独一无二的,不可重复,大多数用于帐号名、手机号码等信息。

查阅更多:https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-options

数据库关系

  • OneToOneField 一对一

一篇内容只能有一个标题(虽不严谨,但是没想到更好的例子)

  • ForeignKey 一对多

摆在面前最容易理解的为,分类,每篇内容只能有一个分类,但是一个分类下可以多很多篇内容。

  • ManyToManyField 多对多

内容中的提到的TAG,每个内容都有很多个TAG,每个TAG下都会有不同的内容。

 

查阅更多:https://docs.djangoproject.com/en/1.10/ref/models/fields/#module-django.db.models.fields.related

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: