模型映射到数据表
- 是 django.db.models.Model 的子类
- 属性是数据库字段
Meta 选项
-
abstract 抽象类
-
app_label
-
base_manager_name
-
db_table 表名
-
get_latest_by 一般是时间字段,整数字段。用于 latest 方法 和 earliest 方法
get_latest_by = ['-priority', 'order_date']
-
managed == True 需要迁移数据库;False 不需要动数据库,已经创建好
-
order_with_respect_to 按某字段排序,一般是外键;然后就可以
get_next_in_order()
get_previous_in_order()
-
ordering 排序
ordering = ['-pub_date']
-降序 -
permissions 权限 permissions = [(‘can_deliver_pizzas’, ‘Can deliver pizzas’)]
-
default_permissions 默认权限 (‘add’, ‘change’, ‘delete’, ‘view’)
-
proxy
-
indexes 索引
indexes = [
models.Index(fields=['last_name', 'first_name']),
models.Index(fields=['first_name'], name='first_name_idx'),
]
-
constraints 约束
CheckConstraint 检测是否满足条件constraints = [ models.CheckConstraint(check=models.Q(age__gte=18), name='age_gte_18'), ]
UniqueConstraint 检测是否唯一;每个房间每天只被预定了一次
UniqueConstraint(fields=['room', 'date'], name='unique_booking')
索引和约束是数据库特性,待研究
- verbose_name 名字
- verbose_name_plural 名字复数
Field 字段
24 个字段
字段 | 用途 | 备注 |
---|---|---|
AutoField | 主键 | |
BigAutoField | 64位主键 | |
BigIntegerField | 64位整数 | TextInput |
BinaryField | 2进制 | max_length |
BooleanField | 布尔 | default null |
CharField | 字符串 | max_length |
DateField | auto_now save 时更新 auto_now_add 创建时添加 | |
DateTimeField | ||
DecimalField | 固定精度数 | max_digits 位数 decimal_places 小数位数 |
DurationField | timedelta | |
EmailField | ||
FileField | 上传文件 | upload_to |
FilePathField | 文件路径 | |
FloatField | 浮点数 | |
ImageField | 图片 | height_field width_field 自动计算 |
IntegerField | ||
GenericIPAddressField | IP | |
NullBooleanField | 是非无 | |
PositiveIntegerField | 正整数 | |
SlugField | 毛毛虫域 | allow_unicode |
SmallIntegerField | -32768 to 32767 | |
TextField | 文本 | Textarea |
TimeField | ||
URLField | max_length=200 | |
UUIDField | universally unique identifiers |
关系域
ForeignKey 一对多 于多类
on_delete 选项:
- CASCADE 一起删
- PROTECT 删除报错
- SET_NULL 置空 if null=True
- SET_DEFAULT 默认 if default
- DO_NOTHING
limit_choices_to 限定选项
staff_member = models.ForeignKey(
User,
on_delete=models.CASCADE,
limit_choices_to={'is_staff': True},)
ManyToManyField 多对多
自关联 models.ManyToManyField(“self”)
OneToOneField 一对一
相关模型操作
>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.add(e) # Associates Entry e with Blog b.
add(), create(), remove(), clear(), and set()