- A+
官网上数据类型的太多了,但是作为一个菜鸟只去看常用的,而其他的等需要的时候再来聊,不过呢,官方的文档最好还是刷下(全选、复制、粘贴到翻译大概知道有哪些)。
按照我们常见的博客的来想一个:
首页需要:标题、关键词、描述、网址、邮箱、其他文字说明
分类需要:分类名称、分类别名、分类标题、分类关键词、分类描述、缩略图
内容页:标题、关键词、描述、发布时间、作者、发布内容、标签、缩略图、文件
根据上面我们来看分析需求:
首页需要:标题(文本)、关键词(文本)、描述(文本)、网址(网址)、邮箱(邮箱)、其他文字说明(多文本)
分类需要:分类名称(文本)、分类别名(文本)、分类标题(文本)、分类关键词(文本)、分类描述(文本)、缩略图(图片)
内容页:标题(文本)、关键词(文本)、描述(文本)、发布时间(时间)、作者(文本)、发布内容(多文本)、标签(文本)、图片(图片)、文件(文件)
筛选出来后,我们就只需要知道
文本、多文本、时间、网址、邮箱(这个是强加的)、图片、文件,还要增加一个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,来限制输入的最大内容,超出内容就无法保存了。
- username = models.CharField(max_length=32)
- TextField (多文本)
用于记录大量的文字内容
- memo = models.TextField()
- DateTimeField (日期时间)
有两个参数,auto_now=False, auto_now_add=False默认两者都为False,当设置为auto_now=true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。
当auto_now_add=True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。
- pubdate = models.DateTimeField('发表时间',auto_now=False, auto_now_add=False)
- URLField (网址)
判断输入的内容为网址,可选参数max_length。
- WebUrl = URLField(max_length=200)
- EmailField (邮箱)
判断输入的内容为邮箱,可选参数max_length。
- WebEmail = EmailField(max_length=200)
- ImageField (图片)
判断输入的内容是否为图片类型,目录为图片存储的位置,使用这两个ImageField和FileField字段的时候,要先配置项目的setting.py配置内容。
- MEDIA_URL = '/media/'
- MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
例:区别于文件类型,图片还支持height_field、width_field用途(自动填充图像的高度或宽度,不知道搞成的图片会不会被压缩,没有测试过。)
- ConPic = models.ImageField('缩略图', upload_to='目录')
- FileField (文件)
上传文件,常用只是上传文件到目录,但是这个又是很危险的,比如说上传的py的执行文件。。。等等,所以更多的请去官方:https://docs.djangoproject.com/en/1.10/ref/models/fields/#filefield
- file = models.FileField(upload_to='目录')
查阅更多:https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
补充
- IntegerField (整数字段)
例:用于排序使用
- index = models.IntegerField(default=100)
数据库参数
- null ,默认为null = False ,如是True则将空值定义为NULL
- blank,默认为blank = False,,如是True则允许内容为空(通常表现为*号为必须输入,而当True时,则可以不输入任何内容)
- choices,选择项
- Address_Data = (
- ('省份', '江苏'),
- ('市区', '淮安'),
- )
- 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