У меня проблема с администратором Django. Я использую версию 1.5.5MultipleObjectsReturned error in django admin - но в базе данных нет дублирования
У меня есть модель стенда, у которой есть внешний ключ к моей модели AreaLayout, которая затем возвращается через несколько моделей с иностранными и многими многими клавишами. Мой код модели можно увидеть на pastebin. Первоначальная индикация проблемы в admin заключается в том, что AreaLayouts дублируются в раскрывающемся списке select в Booth admin. Ошибка MultipleObjectsReturned (traceback) поднимается, когда я пытаюсь сохранить новую стенд. Я был в состоянии проследить это обратно на запрос SQL, который Джанго создающей, чтобы захватить список AreaLayout:
SELECT `venue_arealayout`.`id`, `venue_arealayout`.`name`, `venue_arealayout`.`description`, `venue_arealayout`.`area_id`, `venue_arealayout`.`additional_notes`
FROM `venue_arealayout`
INNER JOIN `venue_area` ON (`venue_arealayout`.`area_id` = `venue_area`.`id`)
INNER JOIN `venue_venue` ON (`venue_area`.`venue_id` = `venue_venue`.`id`)
INNER JOIN `venue_venue_venue_type` ON (`venue_venue`.`id` = `venue_venue_venue_type`.`venue_id`)
INNER JOIN `venue_venuetype` ON (`venue_venue_venue_type`.`venuetype_id` = `venue_venuetype`.`id`)
WHERE (`venue_arealayout`.`id` = 66)
Этот запрос производит дубликат в MySQL, когда я запускаю его там. Удаление последних 2 JOINs приводит к возврату одного результата (который является желаемым результатом), тогда как удаление только последнего соединения по-прежнему приводит к дублированию.
Я попытался выполнить этот запрос с помощью SELECT *
вместо выбора конкретных полей, и два результата в этом случае: почти равно. Разница в том, что у рассматриваемого места есть несколько venuetypes, и я получаю результат для каждого из них. Есть ли способ, которым я могу сказать django, чтобы не включать эти объединения для этих запросов, или есть способ, которым я могу получить отличные результаты по сравнению с AreaLayouts?
Спасибо Alasdair, я думаю, что вы правы. Похоже, мне нужно придумать обходной путь. – hellsgate