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


字段选项

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

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

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']>




#待续。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值