2013-04-10 160 views
3

我正在創建一個Django應用程序(使用開箱ORM)來維護比薩訂單。我有以下型號:Django ORM - 沒有多對多關係的級聯刪除

class Employee(models.Model): 
    name = models.CharField(max_length=50) 

class PizzaPlace(models.Model): 
    name = models.CharField(max_length=50) 
    employees = models.ManyToManyField(Employee) 

class Order(models.Model): 
    description = models.CharField(max_length=50) 
    pizzaplace = models.ForeignKey(PizzaPlace) 
    chef = models.ForeignKey(Employee) 

我使用modelformset_factory來維護每個Pizza Place的員工。我想要的是,無論員工被解僱還是離開比薩店,他們履行的訂單仍然保持完整,並可供比薩店使用。目前發生的情況是,從比薩餐廳刪除員工記錄時,刪除是級聯的。

維持與維護訂單的關聯的最佳方法是什麼?特別是維持訂單是否在過去被員工刪除,即使他們與披薩店無關?

+0

謝謝Thomas和Enrico,你們都給了我可能的選擇。在回顧你的回答並做了一些更多的研究後,我去了「pizzaPlace.employees.remove(員工)」 - 我意識到我實際上並不想「刪除」員工記錄,而只是將他們的入口與PizzaPlace分開。 – Hassan 2013-04-10 14:06:04

回答

5

,你可以:

  • 不會刪除那些從PizzaPlace除去員工,並設置一個標誌,而不是
  • 使用on_delete參數設置員工字段設置爲null:chef = models.ForeignKey(Employee, null = True, on_delete = models.SET_NULL)

看看ForeignKeyon_delete的選項the django documentation找到適合你的用例的東西。刪除員工

e = Employee.objects.get(id=1) 
e.order_set.clear() 
e.delete() 

3

清除的關係,我相信訂單會仍引用刪除的員工,你將不得不面對這一點,但刪除不再級聯刪除所有的訂單。