我有一个关于设计Django模型的一般性问题,并考虑了对级联删除的影响。假设资产管理应用程序的以下简单设计。
class Asset(models.Model):
aquire_date = models.DateField()
cost = models.DecimalField(max_digits=16, decimal_places=2)
description = models.CharField(max_length=30)
account = models.ForeignKey(Account)
vendor = models.ForeignKey(Vendor)
department = models.ForeignKey(Department)
class Vendor(models.Model):
name = models.CharField(max_length=70)
city = models.CharField(max_length=50
phone = PhoneNumberField()
email = models.EmailField()
class Account(models.Model):
account_number = models.IntegerField()
description = models.CharField(max_length=50)
class Department(models.Model):
number = models.IntegerField(unique=True)
name = models.CharField(max_length=50)
因此每个Asset有3个ForeignKey字段到其他表。阅读Django documentation它说“任何有外键指向要删除的对象的对象都将随之删除”。我读到这意味着如果删除Department对象,Asset对象或对象,ForeignKey引用的也将被删除。但是,如果我删除资产,则部门,供应商和帐户仍然存在。
这是理解Django中级联删除的正确方法吗?
我更喜欢的是
这可能吗?
答案 0 :(得分:2)
是的,您的理解是正确的。
解决方案:creating a model ForeignKey
field时,提供on_delete=django.db.models.SET_NULL
。您需要将其与null=True
结合使用以允许此操作,因为默认值为False
。