Python Django ORM-不级联删除多对多关系
我正在创建一个Django应用程序(使用开箱即用的ORM)来维护比萨饼订单。我有以下型号:Python Django ORM-不级联删除多对多关系,python,django,orm,Python,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
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_工厂来维护每个比萨饼店的员工。我想要的是,无论员工是否被解雇或离开比萨店,他们完成的订单都会保持得体,并提供给比萨店。当前发生的情况是,当从比萨饼店删除员工记录时,删除是级联的
维持与保留订单关联的最佳方法是什么?尤其是维持订单在过去由被删除的员工完成,即使他们不再与比萨饼店关联?您可以:
- 不要删除从比萨店删除的员工,而是设置一个标志
- 使用参数on_delete将employee字段设置为null:
chef=models.ForeignKey(employee,null=True,on_delete=models.set_null)
查看中的“删除”上的
外键选项,以找到适合您的用例的内容。在删除员工之前清除关系
e = Employee.objects.get(id=1)
e.order_set.clear()
e.delete()
我相信订单仍将引用已删除的员工,您必须处理该问题,但删除将不再级联删除所有订单。谢谢Thomas和Enrico,您都给了我可能的选择。在回顾了您的回答并做了更多的研究之后,我选择了“pizzaPlace.employees.remove(employee)”——我意识到我实际上不想“删除”员工记录,而只是将他们的条目与pizzaPlace分离。