[英]How to delete corresponding row with ManyToMany relationship in Django?
I am trying to make a basic pizza app with two API's, toppings and pizzas.我正在尝试使用两个 API,浇头和比萨饼制作一个基本的比萨饼应用程序。 When I delete a topping, I would like for the corresponding pizzas to also be deleted since the topping is no longer available.
当我删除一个浇头时,我希望相应的比萨也被删除,因为该浇头不再可用。 As it currently stands, when I delete a topping it just keeps an empty pizza object.
就目前而言,当我删除一个浇头时,它只会保留一个空披萨 object。
Models:楷模:
class Toppings(models.Model):
name = models.CharField(max_length=60, unique=True)
def __str__(self):
return self.name
class Pizza(models.Model):
name = models.CharField(max_length=60, unique=True)
topping = models.ManyToManyField(Toppings, max_length=60, related_name="toppings")
def __str__(self):
return (self.name, self.topping)
Serializers:序列化器:
class PizzaSerializer(serializers.ModelSerializer):
toppings = ToppingsSerializer(read_only=True, many=True)
class Meta:
model = Pizza
fields = "__all__"
class ToppingsSerializer(serializers.ModelSerializer):
class Meta:
model = Toppings
fields = "__all__"
Pizza.views and Toppings.views are almost the same so I just included Pizza. Pizza.views 和 Toppings.views 几乎相同,所以我只包括了 Pizza。
class PizzaList(generics.ListAPIView):
queryset = Pizza.objects.all()
serializer_class = PizzaSerializer
class PizzaCreate(generics.CreateAPIView):
queryset = Pizza.objects.all()
serializer_class = PizzaSerializer
class PizzaUpdate(generics.UpdateAPIView):
queryset = Pizza.objects.all()
serializer_class = PizzaSerializer
class PizzaDelete(generics.DestroyAPIView):
queryset = Pizza.objects.all()
serializer_class = PizzaSerializer
Please let me know if you need anything else.如果您需要其他任何东西,请告诉我。 Thank you.
谢谢你。
ManyToMany by itself does not handle automatic deletion protocols since it does not have sense; ManyToMany 本身不处理自动删除协议,因为它没有意义; It's designed to permit related instances on both sides.
它旨在允许双方的相关实例。 What you could do here are various approaches to accomplish what you want, what I'd suggest is to configure a pre_delete signal on your
Toppings
model that deletes all of its related Pizzas
before being deleted.你可以在这里做的是各种方法来完成你想要的,我建议在你的
Toppings
model 上配置一个pre_delete信号,在被删除之前删除所有相关的Pizzas
。 Also, I would recommend to decouple your M2M relationship and define it as a through model for a cleaner approach and more granular control over your M2M data structure (but this is just my personal opinion and style).另外,我建议将您的 M2M 关系解耦并将其定义为通过 model以更简洁地控制您的 M2M 数据结构(但这只是我个人的观点和风格)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.