2013-12-23 2 views
0

장고 관리자에서 문제가 발생했습니다. 버전 1.5.5를 사용하고 있습니다.Django에서 MultipleObjectsReturned 오류 -하지만 데이터베이스에 중복이 없습니다

내 AreaLayout 모델에 외래 키가있는 부스 모델이 있습니다.이 모델은 foreign 키와 many2many 키가있는 다른 몇 가지 모델로 돌아갑니다. 내 모델 코드는 pastebin에서 볼 수 있습니다. admin에서 문제의 초기 표시는 AreaLayouts가 Booth admin의 선택 드롭 다운에 복제된다는 것입니다. 새로운 부스를 저장하려고 할 때 MultipleObjectsReturned 오류 (traceback)가 발생합니다. 내가 거기를 실행할 때

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의에서 중복을 생산 : 나는 AreaLayout 목록을 잡아 만드는 장고 SQL 쿼리이 다시 추적 할 수 있었다. 마지막 2 개의 JOIN을 제거하면 하나의 결과 만 반환되고 (원하는 결과 임), 마지막 조인 만 제거해도 여전히 중복됩니다.

특정 필드를 선택하는 대신 SELECT *을 사용하여 쿼리를 실행 해 보았습니다.이 경우 두 결과는 으로 거의 같으며과 같습니다. 차이점은 해당 장소가 여러 venuetype을 가지고 있으며 그 각각에 대해 결과를 얻고 있다는 것입니다. 장고에 이러한 쿼리에 대한 조인을 포함하지 말라고 지시 할 수있는 방법이 있습니까, 아니면 AreaLayouts까지 별개의 결과를 얻을 수있는 방법이 있습니까?

답변

1

나는 ticket 11707에보고 된 버그에 걸려 들었다고 생각합니다. 의견 중 하나는 MultipleObjectsReturned 예외가 발생할 수 있음을 언급합니다.

내가 제안 할 수있는 것은 사용자가 limit_choices_to을 사용하지 않는다는 것입니다. 모델이 상당히 복잡하므로 문제를 일으키는 모델을 즉시 볼 수 없습니다.

+0

감사합니다. Alasdair, 네가 맞다고 생각해. 해결 방법을 찾아야 할 것 같습니다. – hellsgate

관련 문제