在Django Rest Framework中合并多个查询集

时间:2018-02-20 12:24:36

标签: python django django-rest-framework django-queryset drf-queryset

如何在Django中合并查询集?我使用Django Rest Framework。

我使用以下模型:

class City(models.Model):
    ...

class House(models.Model):
    city = models.ForeignKey(City, ...)
    ...

class Resident(models.Model):
    house = models.Foreignkey(House, ...)
    ...

我现在希望有一个列出特定城市所有居民的观点(slu is是城市的slu ..)。

以下是我写作的方式:

class ResidentList(generics.ListAPIView):
    lookup_field = 'slug'
    serializer_class = ResidentSerializer
    permission_classes = (IsAuthenticated, IsMayor)

    def get_queryset(self):
        residents = Resident.objects.filter(house__city__slug=self.kwargs['slug'])
        return residents

正如你所看到的,我通过遍历所有公民来创建城市居民名单,并过滤那些在正确城市生活的家庭生活。我觉得这是非常糟糕和低效的,因为数据库必须遍历所有公民。 有像

这样的东西会更好
City.objects.get(slug=<cityslug>).houses.residents

然后我只需循环通过少量的城市。这个问题显然是上面的查询返回一个查询集。因此,我无法将房屋和居民联系起来。

任何帮助将不胜感激! :)

PS:如果您有其他建议我如何改进我的观点,请告诉我!

PPS:我在stackoverflow上找到了this问题,但它只显示了如何获取一个列表,它不适用于get_queryset和django rest结构,是吗?

编辑(更多规范以更好地解决问题): 所以目标是达到api路线:

localhost:8000/api/house/<city_slug>/residents/

获取该市所有居民的名单。

像这样:

{
  [
    {
      resdidentid = "<some_resident_id>",
      residentname = "<some_resident_name>",
      ...
    },
    {
      resdidentid = "<some_resident_id>",
      residentname = "<some_resident_name>",
      ...
    },
    {
      resdidentid = "<some_resident_id>",
      residentname = "<some_resident_name>",
      ...
    },
    ...
  ]
}

再次提供任何帮助非常感谢! :)

0 个答案:

没有答案