2013-02-02 54 views
1

我有一個關於設計Django模型和考慮對級聯刪除有影響的一般性問題。假設資產管理應用程序的以下簡單設計。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 documentation它說'任何有外鍵指向要刪除的對象的對象將隨同它一起被刪除'。我讀到這意味着如果刪除Department對象,Asset對象或對象,ForeignKey所指的也將被刪除。但如果我刪除資產,則部門,供應商和帳戶仍然存在。

這是正確的方式來了解級聯刪除在Django?

我寧願什麼是

  • 當資產被刪除,任何部門,供應商或帳戶被刪除;
  • 刪除部門時,不會刪除資產,但指向該部門的所有ForeignKey字段都設置爲空。

這可能嗎?

回答

2

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

解決方案:當creating a model ForeignKey field,供應on_delete=django.db.models.SET_NULL。您需要將其與null=True結合使用,因爲默認值爲False

+0

菲爾,謝謝你的回答!這工作!我認爲你寫出答案的速度快於我創建問題的速度。有時候你知道你想做什麼,很難在Django文檔中找到它。 – titleistfour