Django 2.0 之Models(模型) 官方文档翻译(一)

以下翻译是自己学习的时候顺便记下的,如果有不对的地方还请指正。

Models(模型)

模型是关于你的数据的唯一、确定的资料来源。它包含你所存储的数据的基本字段和行为。通常,每个模型映射到一个数据库表。

基础知识:

  • 每一个模型都是一个Python类,它是 django.db.models.Model 的子类
  • 模型的每个属性都表示一个数据库字段
  • 通过所有这些,Django提供了一个自动生成的数据库访问API;参见Making queries

举个简单的例子:

下面这个示例模型定义了一个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模型的字段。每个字段被指定为一个类属性,每个属性映射到一个数据库列。

上面的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是由一些模型元数据自动派生出来的,但是可以重写。更多细节见 Table names
  • 一个id字段被自动添加,但是这个行为可以被重写。更多细节查看Automatic primary key fields
  • 本例中的CREATE TABLE SQL使用PostgreSQL语法进行了格式化,但是值得注意的是Django使用了针对 settings file中指定的数据库后端定制的SQL语句

使用模型

一旦你定义好了模型,你就需要告诉Django你将使用这些模型。通过编辑你的配置文件(settings)并修改INSTALLED_APPS设置来添加包含在你的models.py中的模块的名称。

例如,如果你的应用程序的模型位于myapp.models中(由manage.py startapp命令自动创建的包结构),修改后,INSTALLED_APPS部分看上去应该是这样:

INSTALLED_APPS = [
    #...
    'myapp',
    #...
]

当你为INSTALLED_APPS添加新应用时,一定要执行 manage.py migrate 命令,必要的时候可以先使用 manage.py makemigrations 命令生成迁移脚本。

字段

模型中最重要的部分——也是模型中唯一需要的部分是它定义的数据库字段的列表。字段由类属性指定,注意不要选择与 models 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()
字段类型

  • 数据表中列的类型,它告诉数据库存储什么类型的数据(例如,INTEGER、VARCHAR、TEXT)。
  • 在渲染表单字段时使用默认的HTML widget(例如