blog icon indicating copy to clipboard operation
blog copied to clipboard

Django设置伪外键(ForeignKey)

Open qingquan-li opened this issue 4 years ago • 0 comments

参考:

  • https://docs.djangoproject.com/zh-hans/3.1/ref/models/fields/#django.db.models.ForeignKey.db_constraint

一、ForeignKey.db_constraint

设置伪外键的方法:将 ForeignKey.db_constraint 设置为 False

ForeignKey.db_constraint 控制是否应该在数据库中为这个外键创建一个约束。默认值是 True,这几乎是你想要的;将其设置为 False 对数据完整性非常不利。话虽如此,下面是一些你可能想要这样做的情况:

  • 你有无效的冗余数据
  • 你正在共享你的数据库

如果将此设置为 False,访问一个不存在的相关对象将引发 DoesNotExist 异常。


二、设置伪外键实例:

from django.db import models

class OmCustomer(models.Model):
    name = models.CharField(max_length=40)
    age = models.IntegerField()


class OmPost(models.Model):
    title = models.CharField(max_length=40)
    content = models.CharField(max_length=140)
    customer = models.ForeignKey(
        to=OmCustomer,
        on_delete=models.SET_NULL,
        to_field='id',
        db_constraint=False,  # 设置伪外键:在数据库中,不会为这个外键创建一个约束
        null=True)

qingquan-li avatar Feb 06 '21 16:02 qingquan-li