Django N个重复查询嵌套模型

Django N个重复查询嵌套模型,django,django-rest-framework,Django,Django Rest Framework,我有一个允许子区域的区域模型(你可能认为它是带有子类别的类别)。我通过将一个字段嵌套到self作为外键来实现这一点 class Area(models.Model): area = models.CharField(max_length=120) parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='subarea') def __str__(self):

我有一个允许子区域的区域模型(你可能认为它是带有子类别的类别)。我通过将一个字段嵌套到self作为外键来实现这一点

class Area(models.Model):
  area = models.CharField(max_length=120)
  parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='subarea')

  def __str__(self):
    return self.area
使用django rest框架,我成功地获得了正确的输出。问题是,当我使用django工具栏分析请求时,会发出多个重复的请求(N*Area(parent=None))。我已经通过使用预回迁相关或选择相关解决了类似的问题。但从未使用嵌套模型完成此操作。有什么办法解决这个问题吗?还是这个模型的设计很糟糕

我使用以下视图和

class ListArea(generics.ListCreateAPIView):
    serializer_class = AreaSerializer
    queryset = Area.objects.prefetch_related('parent').filter(parent=None)
和序列化程序

class SubAreaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Area
        fields = ('area','id')

class AreaSerializer(serializers.ModelSerializer):
    subarea=SubAreaSerializer(many=True)
    class Meta:
        model = Area
        fields = ('area','id','subarea')
或者这些额外的调用可能是由于可浏览的API造成的

解决方案

我通过以下线索解决了这个问题

而不是

queryset = Area.objects.prefetch_related('parent').filter(parent=None)
我应该用

queryset = Area.objects.prefetch_related('parent').prefetch_related('subarea')

在这里尝试使用
.prefetch_related('area_set')
,因为您指的不是模型,而是这些模型的集合。谢谢您的回答。但它给出了“在区域对象上找不到‘area_set’,‘area_set’是一个无效的参数,无法预取_related()”的答案。