Django Querysets:使用select_related从一组外键返回对象

时间:2017-08-19 13:46:45

标签: django django-queryset

我有一个ArticlePage模型,它有一个城市模型的foriegnkey,我想有效地使用QuerySet来获取一组模型。包含所有已被ArticlePage引用的City实例的城市。

class ArticlePage(Page):
    #...
    city = models.ForeignKey(City, on_delete=models.PROTECT, null=True)
    #...

然后在视图中:

qs = ArticlePage.objects.filter(city__isnull=False).filter(city__name__icontains=self.q).select_related('city')

所以我尝试了上述查询的许多排列,但没有一个返回所需的结果。所有结果都是一组ArticlePage类型而不是City。

我试图做的就是返回一组City类型的结果,其中包含ArticlePage引用的每个City对象,但是我试图用django querysets来解决这个问题,而且我确定我只是在做一些非常愚蠢的事情。感谢这里的任何建议。

1 个答案:

答案 0 :(得分:3)

select-related,只是缓存了相关的对象,如果你需要City的查询集,你需要重写你的qs,例如:

qs_a = ArticlePage.objects.filter(city__isnull=False).values_list('city__pk', flat=True)
qs = City.objects.filter(name__icontains=self.q, pk__in=qs_a)

希望有所帮助