![](/img/trans.png)
[英]Django - How to use delete() in ManyToMany relationships to only delete a single relationship
[英]How to delete corresponding row with ManyToMany relationship in Django?
我正在嘗試使用兩個 API,澆頭和比薩餅制作一個基本的比薩餅應用程序。 當我刪除一個澆頭時,我希望相應的比薩也被刪除,因為該澆頭不再可用。 就目前而言,當我刪除一個澆頭時,它只會保留一個空披薩 object。
楷模:
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)
序列化器:
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 和 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
如果您需要其他任何東西,請告訴我。 謝謝你。
ManyToMany 本身不處理自動刪除協議,因為它沒有意義; 它旨在允許雙方的相關實例。 你可以在這里做的是各種方法來完成你想要的,我建議在你的Toppings
model 上配置一個pre_delete信號,在被刪除之前刪除所有相關的Pizzas
。 另外,我建議將您的 M2M 關系解耦並將其定義為通過 model以更簡潔地控制您的 M2M 數據結構(但這只是我個人的觀點和風格)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.