Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ORM-不级联删除多对多关系_Python_Django_Orm - Fatal编程技术网

Python 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

我正在创建一个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_工厂来维护每个比萨饼店的员工。我想要的是,无论员工是否被解雇或离开比萨店,他们完成的订单都会保持得体,并提供给比萨店。当前发生的情况是,当从比萨饼店删除员工记录时,删除是级联的

维持与保留订单关联的最佳方法是什么?尤其是维持订单在过去由被删除的员工完成,即使他们不再与比萨饼店关联?

您可以:

  • 不要删除从比萨店删除的员工,而是设置一个标志
  • 使用参数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分离。