django模型字段属性中的choices和on_delete

choices选择器

  • 用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值
  • 举个例子
class user_privileges(models.Model):
    CHOICES_LIST = (
        ('SC', 'fast_script'),
        ('BK', 'blueking'),
        ('DT', 'demonstration'),
    )
    users = models.ManyToManyField(USER_DATA, verbose_name=u'对应用户表', null=True)
    biz_name = models.CharField(verbose_name=u"业务名称", choices=CHOICES_LIST, max_length=100, null=True)

    class Meta:
        verbose_name = u"用户操作"
        db_table = 'user_privileges'

`

  • 要获取一个choices的第二元素的值,可以使用get_FOO_display()方法,其中FOO代表这个字段的名称
def data_list(request):
    user = models.USER_DATA.objects.get(user_name='chen')
    models.USER_INFORMATION.objects.create(user=user, biz_name="SC")  # 存储的时候也需要存前一个值
    order = models.USER_INFORMATION.objects.filter(users=1).first()
    choices_data = order.shirt_size  # 会显示SC
    html_data = order.get_biz_name_display()  # 会显示fast_script

外键中的on_delete

  • CASCADE:这就是默认的选项,级联删除,你无需显性指定它。

我们使用外键默认就是级联删除

  • PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
  • SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
  • SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
  • SET(): 自定义一个值,该值当然只能是对应的实体了
  • 其中SET()就是在做删除操作的时候给一个执行的方法
**官方案例**
def get_sentinel_user():
    return get_user_model().objects.get_or_create(username='deleted')[0]

class MyModel(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET(get_sentinel_user),
    )

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值