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']>
#待续。
相关文章推荐
- django 1.8 官方文档翻译: 2-3-1 模型实例参考
- Sencha Touch 2 官方文档翻译之 Using Models(使用数据模型)
- django 1.8 官方文档翻译:2-1-1 模型语法
- django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)
- Sencha Touch 2 官方文档翻译之 Using Models(使用数据模型)
- Sencha Touch 2 官方文档翻译之 Using Models(使用数据模型)
- django 1.8 官方文档翻译: 2-5-7 自定义查找
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第一部分(Page 6)
- django 1.8 官方文档翻译:7-3 Django管理文档生成器
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第四部分(Page 9)
- django 1.8 官方文档翻译:14-5 信号
- Retrofit 2.0非常简单的入门(翻译官方文档)
- MongoEngine对Django支持的官方文档翻译
- Django2.0官方文档--概览
- django 1.8 官方文档翻译: 3-2-1 内建的视图
- django 1.8 官方文档翻译: 2-2-1 执行查询
- django入门 直接翻译官方文档
- django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)
- MongoEngine对Django支持的官方文档翻译
- django 1.8 官方文档翻译: 2-5-2 进行原始的sql查询