Django Python Serializer预取

时间:2016-02-15 19:11:59

标签: python django

我使用Django Python Serializer序列化包含多对多关系的模型列表。即使使用prefetch_related,序列化也会检索预取字段。例如:

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关系?

1 个答案:

答案 0 :(得分:0)

摆脱这种情况的唯一方法是自己构建地图。您将需要2个单独的序列化器,一个用于House,另一个用于Room。 在序列化时,首先迭代房屋查询并对其进行序列化,然后为house.rooms运行Room serializer,它为您提供序列化的房间,可以使用house_serialized ['rooms_serialized'] = rooms_serialized将其作为序列化房屋中的另一个密钥。

希望这有帮助。