Django模型属性设置常见问题

class Person(models.Model):
    name = models.CharField('Name')

class Book(models.Model):
    name = models.TextField('Name', blank = True, null = True)
    author = models.ForeignKey(Person, related_name='book')

CharField

  • 必须设置属性max_length,对应于数据库基本类型varchar,设置最大长度有利于节省数据库空间;

TextField

  • 没必要同时设置blank=Truenull=True的;
  • blank=True意味着该字段(表单内容)可以不填,对数据库无影响;
  • null表示数据库中该字段可以为空;

TextFieldCharField如果为空字符串或者无字符,在数据库中都以""存储。

ForeignKey

  • on_delete是必须设置的

参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。

  • on_delete=models.CASCADE,意思是如果一个person删除了,其对应的所有books要删除
  • on_delete=models.SET_NULL,如果一个person删除了,其对应的所有books变为NULL
  • related_name 是用来做反向查询的名字,如果不设置related_name, 你要从Person反查Book就要使用Person.book_set.filter()或者Person.book_set.all()。如果设置了related_name, 你就可以使用Person.book了。。注意一旦设置了related_name, 你将不能再通过_set方法来反向查询。
    常见的Django Model META类选项

Django中的日期处理

  • DateTimeField、DateField和TimeField,其值分别对应着Python里的datetime.datetime、datetime.date和datetime.time三个实例,这三个Field里都有两个参数:auto_now和auto_now_add,默认值均为False。
  • auto_now参数,每次保存对象时自动将字段值设置为当前时间,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便,常用类似“last-modified”或者"update_time"字段字段不能被手动修改覆盖;当设置为true时,只有每次调用Model.save()时,才会强制更新为当前时间点;当用其他方式更新其他字段时并不会更新
  • auto_now_add参数设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。
  • 实际场景中,往往既希望在对象的创建时间默认被设置为当前值,又希望能在日后修改它,django中所有的model字段都拥有一个default参数,用来给字段设置默认值。可以用default=datetime.now来替换auto_now=True或auto_now_add=True。

常见的Django Model META类选项

from django.db import models

class Meta:
    # 按Priority降序, order_date升序排列.
    get_latest_by = ['-priority', 'order_date']
    # 自定义数据库里表格的名字
    db_table = 'music_album'
    # 按什么排序
    ordering = ['pub_date']
    # 定义APP的标签
    app_label = 'myapp'
    # 声明此类是否为抽象
    abstract = True
    # 添加授权
    permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)

Django Model中字段(Field)的可选项和必选项

在这里插入图片描述在这里插入图片描述

参考链接

Django基础核心技术之Model模型的介绍与设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值