Django 如果模型在多个关系中被引用,则拒绝删除该模型
我有以下型号:Django 如果模型在多个关系中被引用,则拒绝删除该模型,django,django-models,Django,Django Models,我有以下型号: class Meal(models.Model): name_text = models.CharField(max_length=200) class Menu(models.Model): meals = models.ManyToManyField(Meal) 当我删除一顿饭时,我想在菜单中引用该餐时发出一条错误消息,如“您不能删除此餐,因为它在菜单中使用” 当我调用mean.delete()时,这顿饭就被删除了。 对于与ForeignKey关系类似的多
class Meal(models.Model):
name_text = models.CharField(max_length=200)
class Menu(models.Model):
meals = models.ManyToManyField(Meal)
当我删除一顿饭时,我想在菜单中引用该餐时发出一条错误消息,如“您不能删除此餐,因为它在菜单中使用”
当我调用mean.delete()
时,这顿饭就被删除了。
对于与ForeignKey关系类似的多个关系,是否有“on_deleted”属性
或者我必须浏览所有的
菜单
并检查是否有人参考了餐
最简单的方法是覆盖delete()
模型的delete()方法
class Meal(models.Model):
name_text = models.CharField(max_length=200)
def delete(self, *args, **kwargs):
# count the total menus this meal is used in
if self.menu_set.count() > 0:
return "Can not delete this menu"
else:
super(Meal, self).delete(*args, **kwargs)
我认为正确的方法是抓住信号
可能重复的
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from myapp.models import Meal
@receiver(pre_delete, sender=Meal)
def on_meal_delete(sender, instance, **kwargs):
if instance.menu_set.exists():
raise ValueError('Cannot delete this meal. It has menus.')