我希望以特定于所选类别的方式组织类别中的产品。一个产品可以是多个类别的一部分,因此我使用多对多关系来定义它们。
我有以下 4 个模型:
class Category(MPTTModel, ModelWithMetadata, SeoModel, PublishableModel):
name = models.CharField(max_length=512)
...
class Product(SeoModel, ModelWithMetadata, PublishableModel):
name = models.CharField(max_length=512)
category_management = models.ManyToManyField(
Category,
related_name="category_managed_products",
through="OrderedCategoryManagedProduct",
blank=True,
verbose_name="Category Management",
)
...
class OrderedCategoryManagedProduct(SortableModel):
category = models.ForeignKey(
Category, on_delete=models.CASCADE, related_name="cmp_products"
)
product = models.ForeignKey(
Product, on_delete=models.CASCADE, related_name="cmp_categories"
)
added_automatically = models.BooleanField(default=False)
class Meta:
ordering = ["sort_order"]
def get_ordering_queryset(self):
return OrderedCategoryManagedProduct.objects.all()
class SortableModel(models.Model):
sort_order = models.IntegerField(editable=False, db_index=True, null=True)
class Meta:
abstract = True
def get_ordering_queryset(self):
raise NotImplementedError("Unknown ordering queryset")
...
SortableModel 来自Saleor Legacy Views 应用程序
是否可以查询特定类别并接收其中产品的查询集(按顺序排列),sort_order
而不必单独遍历所有产品?