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 一个 ParentModel
的 queryset
(是的,我需要这是一个 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。
我有以下模型(当然是简化的例子):
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 一个 ParentModel
的 queryset
(是的,我需要这是一个 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。