簡體   English   中英

如何刪除Django中具有ManyToMany關系的對應行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM