Django-1.11中文文档-模型Models(一)
阅读原文时间:2023年07月09日阅读:3

官方文档链接

模型是数据信息的唯一并明确的来源。它包含了我们储存的数据的基本字段和行为。通常,每个模型映射到一张数据库表。
基本概念:

  • 每个模型都是django.db.models.Model的一个子类
  • 每个属性代表数据库中的一个字段
  • 在这些基础上,Django为我们提供了一个自动生成的数据库访问API。

下面的示例模型定义了一个Person,其拥有一个first_name和一个last_name属性。

from django.db import models

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

first_name和last_name是模型(model)的字段(fields).每个字段指定为类的一个属性,每个属性映射到数据库的一列(column)。

上面的Person模型将建立类似下面这样一个数据库:

CREATE TABLE myapp_person (
"id" serial NOT NULL primary_key,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);

关于上面代码的一些技术注释:

  • 上面数据表的名称"myapp_person",是从模型的元数据(metadata)自动导入的,但是可以覆写(overridden)。具体参见文档的Table names章节。
  • 自动添加了一个id字段,该行为也可以被覆写。具体参见文档的Automatic primary_key fields章节
  • 这是一段运用PostgreSQL语法建立数据表的SQL语句,但我们不用为此操心,针对后台settings file中设定好的数据库,Django都有量身定做的SQL。

一旦定义好模型之后,需要告诉Django我们将使用这些模型。方法是通过编辑setting.py文件,在INSTALLED_APPS设定中添加包含了我们models.py的模块的名称。

例如,如果我们应用程序的模型存放在myapp.models模块中(该包结构在通过manage.py startapp命令创建应用程序时形成的),INSTALLED_APP应该一部分看起来如下:

INSTALLED_APPS = [
#…
'myapp',
#…

当添加apps到INSTALLED_APPS以后,确保要运行mangae.py migrate指令,有时候还需要先用manage.py makemigrations进行迁移。

一个模型最重要也是唯一要求的部分,就是定义数据库的字段。字段是由类的属性指定的。注意不要选择与模型API冲突的字段名,如clean,save或者delete等。

示例:

from django.db import models

class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)

class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()

字段类型(Field types)

Each field in your model should be an instance of the appropriate Field class. Django uses the field class types to determine a few things:

模型的每一个字段都是相应字段类的一个实例。Django用字段类的类型来决定一些东西:

  • 列类型(column type),告诉数据库储存什么样的数据(比如INTERGER, VARCHAR, TEXT 等)。
  • 渲染表单字段时用默认的HTML部件(比如,