2010-07-23 2 views
3
queryObj = Rating.objects.select_related(
    'Candidate','State','RatingCandidate','Sig','Office','OfficeCandidate').get(
     rating_id = ratingId, 
     ratingcandidate__rating = ratingId, 
     ratingcandidate__rating_candidate_id = \ 
      officecandidate__office_candidate_id) 

Эта строка дает мне ошибку. Я пытаюсь получить много разных таблиц, которые связаны первичными ключами и регулярными идентификаторами. Последним выбором является проблема:соединяют столы с django

ratingcandidate__rating_candidate_id = officecandidate__office_candidate_id. 

Мне нужно пропустить, чтобы получить все данные.

ответ

12

Я пытаюсь получить множество разных таблиц, которые связаны первичными ключами и регулярными идентификаторами.

Не пытайтесь «присоединяться» к столам. Это не SQL.

Вы должны сделать несколько запросов, чтобы получать данные из разных таблиц.

Не беспокойтесь о select_related, пока не сможете доказать, что у вас есть бутылочная шее.

Просто выполняйте различные GET из различных классов по мере необходимости.

Давайте сосредоточимся на кандидате и рейтинге.

class Rating(Model): 
    ... 

class Candidate(Model): 
    rating = Models.ForeignKey(Rating) 

Сделайте это.

r = Rating.objects.get(id=rating_id) 
c = r.candidate_set.all() 

Это позволит получить рейтинг и всех кандидатов, имеющих этот рейтинг. Это - по сути - то, что такое объединение SQL: это две выборки. В ORM Django просто напишите два набора как можно проще. Пусть Django (и ваша база данных) кэширует вещи для вас.

Чтобы отобразить элементы нескольких таблиц в одной строке в форме шаблона, вы делаете это.

По мнению:

r = Rating.objects.get(id=rating_id) 
return render_to_response(some_form, { 'rating':r }) 

В шаблоне:

Rating: {{rating}}. Candidates: {% for c in rating.candidate_set.all %} {{c}} {%endfor%} 

Etc.

Вы просто "перемещаться" среди ваших объектов в шаблоне, чтобы отобразить запрашиваемую информацию.

+1

я не включал остальную часть таблицы, которые мне нужны значения из. Как только я создам все объекты и имею все разные данные, как бы объединить их и вывести их в строках? – atomical

+0

Если у меня есть таблица с несколькими записями, которые соответствуют возвращаемым значениям объектов рейтинга, было бы приемлемо получить всю таблицу и поместить ее в шаблон? – atomical

+0

@atomical: Что еще вы можете сделать, кроме выборки нескольких записей и их размещения в шаблоне? Вы ** не ** собираетесь отображать несколько записей? Я не понимаю. –

1

Вы не можете использовать синтаксис двойного подчеркивания самостоятельно в правой части выражения. Если вам нужно ссылаться на имена полей на правой стороне, используйте F() функцию:

ratingcandidate__rating_candidate_id = F('officecandidate__office_candidate_id') 
+0

Так это форма присоединения? – atomical

+0

Нет. Это строка запроса, чтобы найти объект Rating, который соответствует всем вашим критериям. В ORM Django нет «Join». –

Смежные вопросы