我有这个:
class City(models.Model):
postal_code = models.IntegerField()
class CountryViewset(GenericViewSet, ListModelMixin, RetrieveModelMixin):
queryset = City.objects.values("country_code").annotate(cities_ids=ArrayAgg("id"))
serializer_class = CountrySerializer
class CountrySerializer(serializers.Serializer):
country_code = serializers.IntegerField()
cities_ids = serializers.ListField(child=serializers.IntegerField())
我得到了:
{
country_code: 1,
cities_ids: [1, 2, 3],
}
是否可以直接对对象进行注解?我希望我的国家/地区查询集看起来像这样:
<Queryset [
{
country_code: 1,
cities_ids: <QuerySet [<City: 1>, <City: 2>, <City: 3>]>,
},
...
]>
因为将来我会添加很多django过滤器,我不想每次为了性能而操作时都获取/过滤City对象。
我无法创建国家/地区模型,因为不允许我使用管理命令定期同步国家/地区模型。
1条答案
按热度按时间smdncfj31#
因为将来我会添加很多django过滤器,我不想每次为了性能而操作时都获取/过滤City对象。
我并没有真正理解这对过滤
City
对象的影响。您的查询集将City
作为“根模型”。您可以用途:这意味着它将首先通过Django的过滤后端,然后您对查询集进行注解和后处理。因此,如果您稍后插入
FilterSet
,它将使用该过滤器集。话虽如此,我认为建模可能是问题所在。您通常应该有一个
Country
模型,可能使用code
作为主键,并使用Foreignkey
s。