Я пытаюсь получить много разных таблиц, которые связаны первичными ключами и обычными идентификаторами.
Не пытайтесь «объединять» таблицы. Это не 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: это две выборки. В Django ORM просто напишите две выборки как можно проще. Пусть 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.
Вы просто «перемещаетесь» среди своих объектов в шаблоне, чтобы отобразить запрошенную информацию.