您的位置:首页 > 编程语言 > Go语言

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

2018-02-02 23:02 423 查看

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

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(例如<input type="text">,<select>)。
在Django的管理和自动生成的表单中使用的最小验证要求。
Django有几十个内置的字段类型,你可以在model field reference中找到完整的列表。如果Django的内置字段类型不能满足你的需求,你也可以很容易地编写自己的字段,参见Writing
custom model fields。

字段选项
每个字段都有一组特定的字段参数(在模型字段参考中有记录),例如, 
CharField
(及其子类)需要一个 
max_length
参数,该参数用于指定
VARCHAR
数据库字段在数据库中存储的字段大小。

还有一组适用
b23d
于所有字段类型的通用参数,都是可选的。它们在参考文献中得到了充分的解释,但这里有一个关于最常用的参数的快速摘要:

null
如果为 
True
, Django在数据库中把空值存储为 
NULL
。默认为 
False
.
blank

如果为 
True
,则允许字段为空。默认为 
False
.
请注意,这是与nul不同的。
null
 是纯粹与数据库相关的,而
blank

是与验证相关的。如果一个字段拥有
blank=True
参数,表单验证将允许一个空的值。如果字段 
blank=False
,那么字段将是必须的。
choices

一个可迭代的(例如,一个列表或者元组)2元元组作为该字段的可选项, 如果是给定的, 默认表单小部件将是一个可选框,而不是一个标准的文本字段,而且可选项将被限定为给定的可选内容。
选择列表如下所示:

YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
)
每个tuple中的第一个元素是将存储在数据库中的值。第二个元素由字段的表单小部件显示。

给定一个模型实例,一个带有choices属性的字段的显示值可以使用
get_FOO_display()
方法来访问。例如:

from django.db import models

class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

default
字段的默认值。这可以是一个值或一个可调用的对象。如果可调用,则每次创建新对象时都会调用它。
primary_key

如果为 
True
,那么该字段将是模型的主键。

如果你没个给模型中的任何字段指定
primary_key=True,
Django会自动添加一个
IntegerField
来保存主键。所以你不需要在你的字段中指定
primary_key=True
除非你想覆盖默认的主键行为。更多信息请参阅Automatic
primary key fields。

主键字段是只读的,如果你修改现有对象上主键的值并保存,将会在原有的对象旁边创建一个新的对象。例如:
from django.db import models

class Fruit(models.Model):
name = models.CharField(max_length=100, primary_key=True)
>>> fruit = Fruit.objects.create(name='Apple')
>>> fruit.name = 'Pear'
>>> fruit.save()
>>> Fruit.objects.values_list('name', flat=True)
<QuerySet ['Apple', 'Pear']>


#待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息