Установите максимальную глубину рекурсии при сериализации модели Django с внешним ключом в JSON - PullRequest
0 голосов
/ 26 мая 2009

У меня есть модель Django, созданная для Google App Engine,

Model A():
  propA = ReferenceProperty(B)

Model B():
  propB = ReferenceProperty(C)

Model C():
  propC = ReferenceProperty(B)

Я написал собственный сериализатор Django, который будет извлекать данные для ReferenceProperty (ов) и сериализовать их по исходной модели.

Проблема возникает, когда я пытаюсь сериализовать экземпляр Модель A . Мой пользовательский сериализатор попытается получить propA , который содержит ссылку на Модель C , поэтому сериализатор получит Модель C , которая содержит ссылку на Модель B и рекурсия продолжается и продолжается. Есть ли способ остановить рекурсию после глубины, скажем, 2 ??

Мой сериализатор - настроенная версия текст ссылки

P.S .: Я готов опубликовать свой код, если это будет необходимо. В настоящее время я не прикрепил код, поскольку не нахожусь на своей машине разработки.

Спасибо,
Арун Шанкер Прасад.

Ответы [ 3 ]

2 голосов
/ 26 мая 2009

Просто измените ваши функции, чтобы получить аргумент глубины. Каждый раз, когда вы следуете за ReferenceProperty, вызывайте функцию с глубиной, меньшей глубины, которая была передана. Если функция вызывается с глубиной == 0, возвращает None или любое другое значение-заполнитель, подходящее в вашем случае.

0 голосов
/ 12 августа 2009

Я пытаюсь найти сериализатор, который работает с Google App Engine и следит за отношениями. Можно ли опубликовать измененный код, который вы использовали для этого?

0 голосов
/ 26 мая 2009

Почему бы вам просто не сделать рекурсию правильно? Любая рекурсивная операция должна иметь базовый случай , в противном случае она будет продолжаться вечно, как показывает ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...