장고 관리자에서 문제가 발생했습니다. 버전 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까지 별개의 결과를 얻을 수있는 방법이 있습니까?
감사합니다. Alasdair, 네가 맞다고 생각해. 해결 방법을 찾아야 할 것 같습니다. – hellsgate