models
文档版本
Documentation version: 1.10
简单实例
定义
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)
['Apple', 'Pear']主键
获取所有项
删除所有
关系(Relationships)
多对一关系(Many-to-one relationships)
使用
django.db.models.ForeignKey定义多对一关系
示例
一辆车(Car)对应多个制造商(Manufacturer )
定义递归关联(对象关联自身)
使用未定义的
Model建议使用模型名称单数形式作为成员变量(如上例中的变量
manufacturer)
多对多关系(Many-to-many relationships)
使用
ManyToManyField定义多对多关系
判断存不存在
添加
示例
一个Pizza(披萨)有多个Topping(配料), 一个Topping可以在多个Pizza上.
可以像多对一关系一样定义
递归关联和使用未定义模型建议使用模型名称复数形式作为成员变量(如上例中的变量
toppings)多对多关系只能在两个相关模型中的一个内定义, 在哪一个里面定义无所谓
通常, 多对多字段(ManyToManyField)应该定义在将要被修改的表格中. 上例中, 在Pizza中定义Topping(配料), 因为相比认为配料在多个披萨里面, 披萨里面有多种配料更容易理解. 按照上例中多对多字段的定义方式, Pizza表可以让用户选择多种配料(而不是配料中选披萨).
另一个示例
文章和出版商.
注意: 如果使用模型中间件来定义多对多关系, 可能会禁用一些相关的管理方法, 以至于下面的示例可能无法工作
创建几个Publications
创建一个Article
与保存之前无法和Publication关联
保存
添加关联
重新创建一个Article并和多个Publication关联
重复添加也没问题
如果添加的对象类型不正确, 会抛出
TypeError异常一步完成创建Article并添加Publication
Article对象可以访问相关联的Publication
Publication对象也可以访问相关联的Article对象
多对多关系可以通过使用跨关系查找(
lookups across relationships)查询count()和distinct()方法支持反向多对多查询
执行一个关联工作是非常简单的
如果我们删除了一个Publication, 它关联的Articles将不能再访问它
如果我们删除了一个Article, 它关联的Publications将不能再访问它
添加关系
从Publication中移除Article
也可以通过在Article中移除Publication
关系集合可以被设置
关系集合可以被清空
或者从关联的对象清空:
批量删除Publications
批量删除Articles
多对多关系额外字段
Migrations
生成变更
python manage.py makemigrations
应用变更
字段
datetimefield
user migrations位置
验证字段
自定义验证函数
问题: 将model写在不同文件及文件夹下, 无法生成数据表
Django会搜索所有继承django.db.models.Model的类, 并生成相应的数据表,如果没能正常生成, 可能的原因:
定义
model的源文件的路径中有文件夹下不包含__init__.py, 这样python不会把该文件夹当作package
最后更新于
这有帮助吗?