在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用作类的属性时错误地克隆该查询集