Django学习笔记:模型搭建

模型简介

  模型是一个用于表示数据的Python类,包含基本的数据字段和行为,在Django中,通常一个模型就代表一个数据库表。模型继承自django.db.models.Model, 模型的每一个属性代表一个数据表的列。
  例子:

1
2
3
4
5
from django.db import models

class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)

  需要注意的是django根据模型所属应用程序生成数据库表明,命名规则:应用程序名_模型名,Django会自动添加id字段作为数据库表的主键。

个人理解

  个人对模型部分的理解是对数据库的操作,models.py文件中的所有操作都可以找到与之对应的数据库操作,只不过有特有的字段名称。而在编辑好模型后进行的数据迁移操作实际上就是将models.py里面的翻译成脚本,然后通过执行脚本文件对数据库进行操作从而生成当前APP所需要用到的数据库。

字段

  字段是一系列数据表列的定义。字段名字中不能出现连续的两个下划线,因为连续的两个下划线是Django数据库API的特殊语法。

常用字段

  1. AutoField
    根据已有的ID自动增长,常用作主键,一般情况下会自动创建。
  2. BooleanField
    字段值只包含True和False,默认情况下对应HTML的复选框:
  3. CharField
    保存不太长的字符串(超长字段建议使用TextField)。必须给出CharField.max_length属性值,默认情况下对应HTML的文本框:
  4. DateField
    日期类型,对应Python中的datetime.date类型。参数有:
    auto_now:每当保存数据(Save())时都会更新时间为当前时间且不能被重写。
    auto_now_add: 只有在数据第一次创建时才会保存当前时间且不能被重写。
  5. DateTimeField
    日期时间类型,对应Python中的datetime.datetime类型,参数与DateField一样。默认情况下对应HTML的复选框:
  6. EmailField
    可以验证有效邮件地址的CharField。
  7. FileField
    文件上传控件,可选参数:
    upload_to:文件上传后保存位置(在settings.py中设置MEDIA_ROOT,upload_to所指定的路径会拼接在MEDIA_ROOT之后)
    storage:负责文件存储的Python类,用于存储和提取文件。
  8. ImageField
    包含FileField的全部属性与方法,但是仅允许上传图片类型的文件,额外两个可选属性:
    height_field: 高度
    width_field: 宽度
  9. TextField
    超长文本类型
  10. URLField
    只接受URL字符串的CharField类型。

通用属性

  1. null
      默认为True,保存模型后数据库的对应字段中保存空。
      文本型字段尽可能不用null属性,因为当时用默认值null时,数据库中就可能出现两种空数据:NULL和空字符串,而Django默认使用空字符串。
  2. blank
    默认值为False,当设置为True时字段值允许为空
  3. choices
    属性值为一个可迭代对象,如列表或元组,迭代对象的每个成员包括两个字符串,第一个值作为字段值保存到数据库中,第二个值用于提高字段的可读性。例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    YEAR_IN_SCHOOL_CHOIECES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
    ) # 定义一个元组

    year_in_school = models.CharField(
    max_length = 2,
    choices = YEAR_IN_SCHOOL_CHOICES, # 直接引用元组
    default = 'Freshman',
    )
  4. default
    设置字段默认值。属性值可以是字符串也可以是方法。默认值不可以是可变对象,如列表。

  5. primary_key
    将字段设置为数据表主键。如果模型中任何字段都不包含primary_key=True属性,会自动添加一个字段作为主键。
  6. verbose_name
    类似于字段的说明。
    除了ForeignKey、ManyToManyField、OneToOneField三种字段类型外,其他字段类型都包含一个默认的verbose_name属性,可以直接在字段属性列表的第一位输入文本作为verbose_name属性值,如未给出则会将字段名作为verbose_name(字段名如果包含下划线会换成空格)。

    个人理解

    模型对应数据库的表,那么字段就对应表的列。

元属性

通过在模型中添加一个叫做Meta的子类定义。

abstract

abstract = True,当前模型将成为一个抽象类。

ordering

该属性是一个元组、列表或者查询表达式。定义了显示的顺序。

总结

  模型的构建对应数据库的构建,这次只记录了目前为止用过的一些知识,还有很多字段、属性、元属性尚未涉及,以后碰到了再继续补充。