1

我有一个关于设计 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 文档,它说“任何具有指向要删除的对象的外键的对象都将被删除”。我读到这意味着如果我删除一个 Department 对象、Asset 对象或对象,ForeignKey 所指的对象也将被删除。但是,如果我删除资产,部门、供应商和帐户仍然存在。

这是理解 Django 中级联删除的正确方法吗?

我更喜欢的是

  • 删除资产时,不会删除部门、供应商或帐户;
  • 删除部门时,不会删除任何资产,但指向该部门的所有 ForeignKey 字段都设置为空。

那可能吗?

4

1 回答 1

2

是的,你的理解是正确的。

解决方案:创建模型ForeignKey字段时,提供on_delete=django.db.models.SET_NULL. 您需要将其与 结合null=True以允许这样做,因为默认值为False.

于 2013-02-02T03:47:40.603 回答