在django rest框架中,如何将小查询与嵌套序列化器结合起来?

在django rest框架中,如何将小查询与嵌套序列化器结合起来?,django,django-rest-framework,Django,Django Rest Framework,我的数据库关系如下所示: +-----------+ | Container | +-----------+ | id | +-----------+ | |1..n +--------------+ | Child | +--------------+ | id | | container_id | +--------------+ 我想将子的序列化程序嵌套在容器序列化程序中,这样我就可以

我的数据库关系如下所示:

  +-----------+
  | Container |
  +-----------+
  | id        |
  +-----------+
        | 
        |1..n 
+--------------+
| Child        |
+--------------+
| id           |
| container_id |
+--------------+
我想将
的序列化程序嵌套在
容器
序列化程序中,这样我就可以在一个HTTP请求中获取这两个对象。但是,当我查询
容器的列表时,Django REST框架只进行一次查询以获取所有
容器
,然后对与特定
容器
对象关联的每组
子对象进行一系列单独的查询。以下是我的玩具示例:

# Models
class Container(models.Model):
    pass

class Child(models.Model):
    container = models.ForeignKey(Container,related_name="children")

# Serializers
class ChildSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Child
        fields = ('url','container')

class ContainerSerializer(serializers.HyperlinkedModelSerializer):
    children = ChildSerializer(many=True)
    class Meta:
        model = Container
        fields = ('url','children')

# Views
class ContainerViewSet(viewsets.ModelViewSet)
    queryset = Container.objects.all()
    serializer_class = ContainerSerializer

class ChildViewSet(viewsets.ModelViewSet)
    queryset = Child.objects.all()
    serializer_class = ChildSerializer

有没有办法将所有
子查询合并到一个后端查询中,然后将结果分发到
容器
对象中?

Django REST框架不会为您优化查询,您可以决定如何最好地删除任何N+1查询。您应该遵循中介绍的指导原则来处理性能问题

对于ForeignKey关系,您应该在查询中使用,这将预取原始查询中的对象

对于多个和GenericForeignKey关系,应该使用。关于这一点,我在中已经写了很多,但要点是您使用它的方式类似于
select\u related

您应该在视图上覆盖
get\u queryset
中的查询以获得最佳结果,因为您不必担心Django REST Framework在将queryset用作类的属性时错误地克隆该查询集