Django SortedManyToManyField не сохраняет порядок в обратном отношении

Я использую поле SortedManyToManyField из django-sortedm2m как показано ниже в моих моделях:

import uuid
from django.db import models
from sortedm2m.fields import SortedManyToManyField

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)

class Product(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=250)
    categories = SortedManyToManyField(to=Category, blank=True, related_name="product_items")

Теперь давайте создадим и добавим некоторые данные в оба поля:

# create some categories
c1 = Category.object.create(name="C1")
c2 = Category.object.create(name="C2")
c3 = Category.object.create(name="C3")

# create some products
p1 = Product.object.create(name="P1")
p2 = Product.object.create(name="P2")
p3 = Product.object.create(name="P3")

# add categories to product P1
p1.categories.add(c1, c2, c3)

# add products to category C1
c1.product_items.add(p1, p2, p3)

Теперь происходит то, что categories вставляются и извлекаются в правильном порядке, а продукты, добавленные в product_items, нет.

Когда я проверил основной класс тип поля p1.categories, он говорит, что его <class 'sortedm2m.fields.create_sorted_many_related_manager.<locals>.SortedRelatedManager'>, а когда я делаю то же самое для обратного отношения (product_items), оно говорит, что <class 'django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager'>

Значит ли это, что порядок сохраняется явно для поля, определяющего поле SortedManyToManyField, а не связанное_имя/обратное отношение? Должен ли я явно определить поле product_items как поле SortedManyToManyField в модели Category?

Я действительно пытался разобраться в этом, но безрезультатно. Буду признателен за любую помощь.

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