Как удалить соответствующий ряд из отношения ManyToMany в Django?

Я пытаюсь сделать базовое приложение для пиццы с двумя API, топпингами и пиццами. Когда я удаляю топпинг, я хотел бы, чтобы соответствующие пиццы также удалялись, поскольку топпинг больше не доступен. В настоящее время, когда я удаляю топпинг, он просто сохраняет пустой объект пиццы.

Модели:

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 сам по себе не обрабатывает протоколы автоматического удаления, поскольку не имеет смысла; он разработан для разрешения связанных экземпляров с обеих сторон. Здесь можно использовать различные подходы для достижения желаемого, я бы предложил настроить сигнал pre_delete на вашей модели Toppings, который удаляет все связанные с ней Pizzas перед удалением. Кроме того, я бы рекомендовал разделить ваши отношения M2M и определить их как сквозную модель для более чистого подхода и более детального контроля над структурой данных M2M (но это только мое личное мнение и стиль).

Вернуться на верх