Django orm - order_by 外键 select 的结果

Django orm - order_by the result of select on a foreign key

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

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()     

我需要 return 一个 ParentModelqueryset(是的,我需要这是一个 queryset,所以以后发生的分页等不会' t break) 由 family__children__score_to_sort_by 使用 is_the_relevent_child 标志来选择我按哪个 Child 订购。

我知道如果 Child 与 Family 有 OneToOne 关系,我可以这样做:

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

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

family__children__score_to_sort_by 是 ParentModel 上任何查询的查询行中的 well-defined 列。所以你可以直接在 is_the_relevant_child 上过滤,像这样:

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

在此排序中只应考虑相关的 child。