Я пишу приложение для спортивной лиги. У меня есть модели для команд и расписания. Когда пользователь выбирает команду, они могут видеть победы, потери, связи этой команды. Я бы хотел показать все игры этой команды.Поиск внешнего ключа Django в QuerySet
Models.py
class Teams(models.Model):
team = models.AutoField(primary_key=True)
team_name = models.CharField(max_length=225, blank=True, null=True)
sport_id = models.ForeignKey(Sports, models.DO_NOTHING, blank=True, null=True)
division = models.CharField(max_length=225, blank=True, null=True)
school = models.ForeignKey(School, models.DO_NOTHING, blank=True, null=True)
win = models.IntegerField(blank=True, null=True, default=0)
loss = models.IntegerField(blank=True, null=True, default=0)
tie = models.IntegerField(blank=True, null=True, default=0)
class Meta:
managed = True
db_table = 'teams'
def __str__(self):
return self.team_name
class Schedule(models.Model):
match = models.AutoField(primary_key=True)
match_date = models.DateField(blank=True, null=True)
home = models.ForeignKey(Teams, related_name='home_set', blank=True, null=True)
away = models.ForeignKey(Teams, related_name='away_set', blank=True, null=True)
home_score = models.IntegerField(blank=True, null=True)
away_score = models.IntegerField(blank=True, null=True)
class Meta:
managed = True
db_table = 'schedule'
def __str__(self):
return '%s at %s' % (self.away, self.home)
И мои соответствующие взгляды:
class TeamView(generic.TemplateView):
template_name = "teamsports/teamview.html"
def get_context_data(self, **kwargs):
context = super(TeamView, self).get_context_data(**kwargs)
q = self.request.GET.get('team_name')
context['team'] = Teams.objects.get(team=q)
context['game_list']=Schedule.objects.filter(home=q).values() | Schedule.objects.filter(away=q).values()
return context
Шаблон:
{% extends 'base.html' %}
{% block content %}
<h1>Team Name: {{ team }}</h1>
<h1>Wins: {{ team.win }}</h1>
<h1>Losses: {{ team.loss }}</h1>
<h1>Results: </h1>
<h1>{% for game_list in game_list|dictsort:"match_date" %}</h1>
<p>Date: {{game_list.match_date|date }} Home Team: {{ game_list.home_team }} Score: {{ game_list.home_score }} Away Team: {{ game_list.away_team }} Score {{ game_list.away_score|linebreaksbr }}</p>
{% endfor %}
<li><a href="/standings/">Pick another, ya jabroni</a></li>
{% endblock %}
Это работает! Но команды в «game_list» отображаются как их идентификационные номера, а не имена. Как мне оглянуться на мою модель команды, чтобы получить название команды? Вещи, которые я пробовал:
Пишущие большой запрос с дома и на выезде игр с использованием .values (TEAM_NAME). Ошибка в полях запроса, которые не совпадают, что имеет смысл для меня.
Написание отдельного изображения для предстоящих игр и использование "include". Все еще есть проблема, соответствующая противостоящей команде к игре.
Вещи Я рассмотрел:
Написать шаблонный тег
This или с помощью Q
Любое руководство будет оценено
Спасибо, Даниил. Я все еще читаю на Q, поэтому я понимаю это лучше, но я получаю сообщение об ошибке. Объект «Q» не имеет атрибута «order_by». –
Хм, вы уверены, что у вас есть круглые скобки в нужном месте? Есть два близких parens после второго Q. –
OK - это было исправлено. Но теперь созданный шаблон не отображает никаких данных. Есть идеи? –