如何在 Django 中合并查询集?我使用 Django Rest 框架。
我使用以下模型:
class City(models.Model):
...
class House(models.Model):
city = models.ForeignKey(City, ...)
...
class Resident(models.Model):
house = models.Foreignkey(House, ...)
...
我现在想要一个列出给定城市的所有居民的视图(slug 是城市的 slug)。
这是我写它的方式:
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上发现了这个问题,但它只显示了如何获取一个列表,它不适用于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>",
...
},
...
]
}