Django-polymorphic-我可以按内容类型指定顺序吗?

时间:2019-05-23 10:06:45

标签: python django 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 Meta中设置Product

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

如何确保Product.objects.all()会按顺序返回QuerySet-WoodProductPlasticProductIronProduct s?

编辑

因此它看起来像:

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

1 个答案:

答案 0 :(得分:1)

我无法测试。但是基于文档iltering-inherited-classescombining-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')