3

我正在创建一个 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 的员工。我想要的是,无论员工是被解雇还是离开 Pizza Place,他们履行的订单都保持完好,并且可供 Pizza Place 使用。当前发生的情况是,当从 Pizza Place 删除员工记录时,删除是级联的。

保持与保留订单的关联的最佳方法是什么 - 特别是保持订单已在过去由被删除的员工完成,即使他们不再与披萨店相关联?

4

2 回答 2

5

你可以:

  • 不删除从 a 中删除的员工,PizzaPlace而是设置一个标志
  • 使用on_delete参数将员工字段设置为空:chef = models.ForeignKey(Employee, null = True, on_delete = models.SET_NULL)

查看django 文档ForeignKey的a 选项以找到适合您用例的内容。on_delete

于 2013-04-10T02:14:03.133 回答
3

在删除员工之前清除关系

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

我相信订单仍将引用已删除的员工,您将不得不处理它,但删除将不再级联删除所有订单。

于 2013-04-10T02:24:14.713 回答