代码之家  ›  专栏  ›  技术社区  ›  coredumped0x

Django SortedManyToManyField不以反向关系保存顺序

  •  0
  • coredumped0x  · 技术社区  · 3 年前

    我正在使用 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.objects.create(name="C1")
    c2 = Category.objects.create(name="C2")
    c3 = Category.objects.create(name="C3")
    
    # create some products
    p1 = Product.objects.create(name="P1")
    p2 = Product.objects.create(name="P2")
    p3 = Product.objects.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'>

    这是否意味着订单是为定义的字段显式保存的 按人排序字段 字段,而不是related_name/反向关系? 我必须明确定义字段吗 产品_项目 作为一个 按人排序字段 上的字段 Category 模型

    我真的一直在努力弄清楚这一点,但并不缺乏。我感谢你的帮助。

    0 回复  |  直到 3 年前