1

У меня есть эти модели в Django 1.10 версииDjango ORM select_related рендеринга шаблона

class Game(models.Model): 
    game_code = models.CharField(max_length=10) 
    home_team = models.ForeignKey(Team, related_name="home_set", default=2, blank=True, null=True) 
    away_team = models.ForeignKey(Team, related_name="away_set", default=2, blank=True, null=True) 


class GameCoefficient(models.Model): 
    game = models.ForeignKey(Game, default=3) 
    win_type = models.CharField(choices=win_type, max_length=250, blank=True, null=True, default="") 
    value = models.FloatField(max_length=250, blank=True, null=True, default="") 

после этого ОРМ запроса

class BaseView(View): 
    data = dict() 
    template = "index.html" 
    def get(self, request): 
     self.data['coefficents_and_game'] = GameCoefficient.objects.all().select_related('game') 
     return render_to_response(self.template, self.data) 

я смог получить коэффициенты и отображать их игры. Теперь в шаблонах отображаются повторяющиеся «game_code». Мне сложно отображать игру и ее коэффициенты.

+0

Опишите проблему подробнее. –

+0

Я пишу на русском языке [ссылка] (http://ru.stackoverflow.com/questions/613180/select-related-%D0%9A%D0%B0%D0%BA-%D0%B2%D1%8B % D0% B2% D0% B5% D1% 81% D1% 82% D0% B8-% D0% БК% D0% BE% D0% B4% D0% B5% D0% BB% D1% 8C-% D0% BA -% D0% BA% D0% BE% D1% 82% D0% BE% D1% 80% D0% BE% D0% B9-% D0% BF% D1% 80% D0% B8% D0% B2% D1% 8F % D0% B7% D0% B0% D0% BD% D0% B0-% D0% B4% D1% 80% D1% 83% D0% B3% D0% B0% D1% 8F-% D0% до н.э.% D0% BE % D0% B4% D0% B5% D0% BB% D1% 8C-% D0% BF% D0% BE-foreignke) –

+0

спасибо. следуйте ответам Джанна. Его решение выглядит хорошо! –

ответ

2

Это может быть проще для вас, чтобы отправить игру QuerySet в шаблон вместо:

class BaseView(View): 
    data = dict() 
    template = "index.html" 
    def get(self, request): 
     self.data['games'] = Game.objects.prefetch_related('gamecoefficient_set').all() 
     return render_to_response(self.template, self.data) 

Использование шаблона, как:

{% for game in games %} 
    {{ game.game_code }} 
    {% for coeff in game.gamecoefficient_set.all %} 
    {{ coeff.value }} 
    {% endfor %} 
{% endfor %} 

Update: Добавлена ​​prefetch_related для оптимизации БД-запросов

+0

В этом случае сколько запросов будет отправлено в базу данных? Один или больше? –

+0

Хорошая точка. Я добавил файл prefetch_related, который будет отображать связанную модель и присоединиться к ней в python (например, http://stackoverflow.com/a/31237071/246028 для объяснения) – Jann

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

  • Нет связанных вопросов^_^