2016-02-15 5 views
1

Я использую Django Python Serializer для сериализации списка моделей, которые содержат отношения «многие ко многим». Даже с prefetch_related, сериализация извлекает предварительно загруженные поля. Например:Django Python Serializer Prefetch

class House(models.Model): 
    name = models.CharField(...) 
    rooms = models.ManyToManyField(Door) 

class Room(models.Model): 
    name = models.CharField(...) 
    num_windows = models.PositiveIntegerField(...) 

Использование режима отладки Я вижу, что следующая функция выполняет ожидаемые запросы к базе данных 2.

getHouses(): 
    House.objects.all().prefetch_related('rooms') 

Однако при попытке сериализовать этот объект с помощью django.python.Serializer, он делает дополнительный запрос для комнат в каждом доме. Есть ли способ настроить сериализатор, чтобы увидеть предварительно запрограммированные отношения m2m?

ответ

0

Единственный способ избавиться от этого - построить карту самостоятельно. Вам понадобятся 2 отдельных сериализатора, один для Дома и другой для комнаты. При сериализации сначала перебирайте запрос и сериализуйте его, затем запустите Room serializer для house.rooms, который дает вам сериализованную комнату, которую можно поставить в качестве другого ключа в сериализованном доме, используя house_serialized ['rooms_serialized'] = rooms_serialized.

Надеюсь, это поможет.

Смежные вопросы