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)
したがって、各アセットには、他のテーブルへの3つのForeignKeyフィールドがあります。Djangoのドキュメントを読むと、 「削除するオブジェクトを指す外部キーを持つオブジェクトは、一緒に削除されます」と書かれています。これは、Departmentオブジェクト、Assetオブジェクト、またはオブジェクトを削除すると、ForeignKeyが参照しているオブジェクトも削除されることを意味します。ただし、アセットを削除しても、部門、ベンダー、およびアカウントは残ります。
それはDjangoでのカスケード削除を理解する正しい方法ですか?
私が好むのは
- 資産が削除されても、部門、ベンダー、またはアカウントは削除されません。
- 部門が削除されると、アセットは削除されませんが、その部門を指すすべてのForeignKeyフィールドはnullに設定されます。
それは可能ですか?