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
?
Я действительно пытался разобраться в этом, но безрезультатно. Буду признателен за любую помощь.