Django orm - order_by外键上select的结果

时间:2015-07-01 06:21:32

标签: python django django-orm

我有以下模型(当然是简化示例):

class ParentModel(Model):
   id = IntegerField(primary_key=True)
   family = OneToOneField(Family)
   objects = SpecificManagerThatDoesAlotOfQueryLogic()

class Family(Model):
    id =IntegerField(primary_key=True)

class Child(Model):
   family = ForeignKey(Family, related_name='children')
   is_the_relevent_child = BooleanField(default=False)  #Only one Child would have this a s
   score_to_sort_by = DecimalField()     

我需要返回一个queryset ParentModel(是的,我需要这个queryset,所以以后发生的分页等不会破坏)通过family__children__score_to_sort_by使用is_the_relevent_child标志来选择我订购的儿童。

我知道如果Child与家人有OneToOne关系我可以用:

ParentModel.objects.filter(**{something:something}).order_by('family__child__score_to_sort_by')

我知道这个建模并不适合这样做,但我出于其他原因需要它,所以我需要让queryset工作正常 我怀疑注释可以帮助我,但我无法弄清楚如何,(或者如果有人能指出我使用一些额外的SQL我也可以处理这个,如果不是太复杂),我们正在使用django 1.6 有任何想法吗?感谢..

1 个答案:

答案 0 :(得分:1)

family__children__score_to_sort_by是ParentModel上任何查询的查询行中定义良好的列。所以你可以直接过滤is_the_relevant_child,如下:

ParentModel.objects.filter(...)
    .filter(family__children__is_the_relevant_child=True)
    .order_by('family__children__score_to_sort_by')

在此顺序中只应考虑相关的孩子。