如何在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>",
...
},
...
]
}
再次提供任何帮助非常感谢! :)