I have a database relationship like the following:
+-----------+
| Container |
+-----------+
| id |
+-----------+
|
|1..n
+--------------+
| Child |
+--------------+
| id |
| container_id |
+--------------+
I want to nest the serializers for the Child
in the Container
serializer so I can get both objects in one HTTP request. However, when I query for a list of Containers
, Django REST Framework does a single query to get all the Containers
, but then does a bunch of individual queries for each set of Child
objects associated with a specific Container
object. Here is my toy example:
# 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
Is there a way to coalesce all the Child
queries into one backend query and then distribute the results amongst the Container
objects?