django1.8 model (1):Model syntax

此文翻译自django 1.8.2官方文档

Models

模型是单一的,明确的和你的数据有关的信息的来源.它包含了你存储的数据的基本字段和行为.通常,一个模型对应一个数据库表.
基础知识:
- 每个模型都是django.db.model.Model的子类
- 模型的每个属性都代表一个数据库字段
- 在这2个前提下,django提供了自动生成(automatically-generated)数据库连接(database-access)的API;

Quick example

这个示例模型定义了一个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是模型的字段.一个字段就是一个类属性,每个属性都映射一个数据库的列.
上面的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,是由模型的元数据(metaclass)自动生成的,但可以重写.
- id字段是自动添加的,这个行为(behavior)也可以重写.
- 这段建表SQL语句用的是PostgreSQL语法格式化的.值得注意的是,django根据settings文件里指定的数据库驱动来使用SQL.

Using models

在你定义了模型之后,要告诉django你将要使用这些模型.编辑你的settings文件,更改INSTALLED_APPS设置,添加包含你的models.py的模块名.

INSTALLED_APPS = {
    # ...
    'myapp',
    # ...
}

当你添加新app到INSTALLED_APPS后,确保运行manage.py migrate,也可以先运行manage.py makemigrations.

Fields

模型最重要的部分-并且是唯一必需的部分-是它定义的数据库字段.这些字段由类属性指定.小心选择字段名,不要和模型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)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

Field types

模型里的每个字段都是一个合适的Field类的实例.django使用field class类型来决定一些事情:
- 数据库字段类型(例如 INTEGER, VARCHAR).
- 渲染表单字段时,默认使用的HTML widget(例如,