Django 笔记之 Model 模型

模型映射到数据表

  • 是 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主键
BigAutoField64位主键
BigIntegerField64位整数TextInput
BinaryField2进制max_length
BooleanField布尔default null
CharField字符串max_length
DateFieldauto_now save 时更新 auto_now_add 创建时添加
DateTimeField
DecimalField固定精度数max_digits 位数 decimal_places 小数位数
DurationFieldtimedelta
EmailField
FileField上传文件upload_to
FilePathField文件路径
FloatField浮点数
ImageField图片height_field width_field 自动计算
IntegerField
GenericIPAddressFieldIP
NullBooleanField是非无
PositiveIntegerField正整数
SlugField毛毛虫域allow_unicode
SmallIntegerField-32768 to 32767
TextField文本Textarea
TimeField
URLFieldmax_length=200
UUIDFielduniversally 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值