首页 > 解决方案 > Django-polymorphic - 我可以按内容类型指定顺序吗?

问题描述

django-polymorphic用于多种产品类型。

class Product(PolymorphicModel):
    order = models.PositiveSmallIntegerField(default=999, verbose_name='Poradie')

class WoodProduct(Product):
    ....

class IronProduct(Product):
    ....

class PlasticProduct(Product):
    ....

我想设置默认排序(或在过滤时明确指定QuerySet)基于

1. model type 
2. order attribute

我得到的最接近的是在ordering = ['polymorphic_ctype_id']模型中设置。class MetaProduct

所以现在我已经按型号类型对产品进行了分组,但我无法设置,哪种类型将是第一个,第二个等等......

如何确保Product.objects.all()将返回QuerySetordering - WoodProducts , PlasticProducts, IronProducts ?

编辑

所以它看起来像:

class Product(...):
   class Meta:
       ordering = [(WoodProduct,PlasticProduct,IronProduct),'order']

标签: pythondjangodjango-polymorphic

解决方案


我不能测试。但是基于iltering-inherited-classes和combine- querysets文档,解决方案可以是:

query = Product.objects.instance_of(WoodProduct).order_by('order')
query |= Product.objects.instance_of(PlasticProduct).order_by('order')
query |= Product.objects.instance_of(IronProduct).order_by('order')

推荐阅读