Django SortedManyToManyField выполнить переупорядочивание
У меня есть следующие две модели, в которых продукт может иметь много категорий, а категория может иметь много продуктов, связанных с ней:
from sortedm2m.fields import SortedManyToManyField
class Product(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=250)
is_visible = models.BooleanField(default=True)
categories = SortedManyToManyField(to=Category, blank=True, related_name="product_items")
number = models.CharField(max_length=150, blank=True, null=True)
description = models.TextField(null=True, blank=True)
related_product_items = models.ManyToManyField(to="self", blank=True)
class Category(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
parent = models.ForeignKey(
to="self", on_delete=models.SET_NULL, null=True, blank=True, related_name="subcategories",
)
name = models.CharField(max_length=250)
is_visible = models.BooleanField(default=True)
Мой сериализатор ProductOrderingSerializer:
class ProductOrderingSerializer(serializers.Serializer):
products = serializers.ListSerializer(child=serializers.UUIDField(), required=True)
category = serializers.UUIDField(required=True)
Мое мнение:
class ProductViewSet(ModelViewSet):
@transaction.atomic
@action(methods=["put"], detail=False)
def order(self, request):
"""
this end point receives list of ids and changes order of products per
category
"""
serializer = ProductOrderingSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
queryset = self.queryset.filter(id__in=serializer.validated_data["products"])
category = serializer.validated_data["category"]
for index, product_id in enumerate(serializer.validated_data["products"]):
# how to perform product ordering per the submitted category?
pass
self.action = "list"
return self.list(request=request)
Последние пару дней я пытаюсь найти решение, но ничего, что работало бы так, как задумано. Любая помощь будет оценена по достоинству!