Python Django order_by()和带注释的独立(<;field>;)命令
我在Ubuntu13.04上使用Django1.4和Python2.7 我知道在Django中跨关系使用Python Django order_by()和带注释的独立(<;field>;)命令,python,django,orm,Python,Django,Orm,我在Ubuntu13.04上使用Django1.4和Python2.7 我知道在Django中跨关系使用order\u by()和distinct()会有问题。似乎大多数建议的解决方案都是使用聚合。我不知道我怎么能在我的情况下做到这一点 我有一个已预筛选的QuerySet。我需要按2个字段排序,然后通过一个不同的外键获得结果 class Contract(models.Model): rpl = models.DecimalField(max_digits=20, decimal_pla
order\u by()
和distinct()
会有问题。似乎大多数建议的解决方案都是使用聚合。我不知道我怎么能在我的情况下做到这一点
我有一个已预筛选的QuerySet
。我需要按2个字段排序,然后通过一个不同的外键获得结果
class Contract(models.Model):
rpl = models.DecimalField(max_digits=20, decimal_places=2, default=0)
priority = models.IntegerField(default=0)
class Offer(models.Model):
contract = models.ForeignKey(Contract)
product = models.ForeignKey(Product)
我需要得到一份报价清单,先按合同优先级排序,然后按合同rpl排序。因此,我需要提供不同的产品
qs.order\u by('-contract\u priority','-contract\u rpl')。独特的('product')
对于Django,我该如何优雅地做到这一点?似乎您需要的是一个分组声明,不幸的是Django没有提供这一点-请看这个问题 就我个人而言,我可能会从另一个角度来处理它,并使用产品查询集。您可以按注释的优先级/rpl值筛选报价字段和订单,然后对于每个产品,您需要分别检索报价详细信息。这意味着每行都有一个额外的查询,但这可能是您所能做的最好的了。例如:
Product.objects.filter(offer__...=...) \
.annotate(priority=models.Max('offer__contract__priority'),
rpl=models.Max('offer__contract__rpl')) \
.order_by('-priority', '-rpl')
这可能是.raw()的情况?我碰巧喜欢SQL。