Как использовать get_queryset с параметром id в foreach определенных элементов внешнего ключа в представлениях на основе классов?
Прежде всего, я очень новичок в django и спасибо за терпение, Я хочу сделать веб-сайт для показа того, как лига выступает и показывает футболиста конкретной команды. вот что я сделал на данный момент
models.py
class League(models.Model):
name = models.CharField(max_length=255)
country = models.CharField(max_length=255)
founded = models.DateField()
def __str__(self):
return self.name
class Team(models.Model):
league = models.ForeignKey(
League, blank=True, null=True, on_delete=models.CASCADE)
image = models.ImageField(
upload_to="images/", default='images/Wolves.png', blank=True, null=True)
name = models.CharField(max_length=255)
win = models.IntegerField(blank=True, null=True)
draw = models.IntegerField(blank=True, null=True)
loss = models.IntegerField(blank=True, null=True)
scored = models.IntegerField(blank=True, null=True)
conceded = models.IntegerField(blank=True, null=True)
founded = models.DateField(blank=True, null=True)
games = models.IntegerField(blank=True, null=True)
point = models.IntegerField(blank=True, null=True)
average = models.IntegerField(blank=True, null=True)
class Meta:
ordering = [
'-point', '-average'
]
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.games = self.win + self.draw + self.loss
self.point = self.win*3 + self.draw
self.average = self.scored - self.conceded
super(Team, self).save(*args, **kwargs)
Было бы здорово, если бы я использовал элемент slug вместо id Чтобы легко понять, в какой лиге вы находитесь
<urlpatterns = [
path('', home, name='home'),
path(r'^/league/(?P<id>\d+)/$', LeagueListView.as_view(), name='league'),
<
<
class LeagueListView(ListView):
model = Team
template_name = "league.html"
context_object_name = "teams_of_league"
# def get_queryset(self, request, *args, **kwargs):
# HERE I want to get teams of specific league and send to the league.html
urls.py
<ul class="navbar-nav me-auto">
<li class="nav-item active">
<a class="nav-link" href="{% url 'league' specific_teams %}">Premier League</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{% url 'league' specific_teams %}">La liga</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{% url 'league' specific_teams %}">League 1</a>
</li>
</ul>
league.html
в этом файле находятся таблицы для соответствующей лиги, включая информацию о командах
Заранее благодарю
urls.py
urlpatterns = [
path('league/<id>', LeagueListView.as_view(), name='league'),
]
self.kwargs['id']
получить аргумент, переданный в url: https://example.com/league/2
В этом случае получаем 2
.
Для получения дополнительной информации вы можете обратиться к документации Django.
<class LeagueListView(ListView):
model = Team
template_name = "league.html"
context_object_name = "teams_of_league"
def get_queryset(self):
league_id = int(self.kwargs['id'])
self.league = League.objects.filter(pk=league_id).first()
Теперь, когда у вас есть self.league
экземпляр, вы можете получить команды, относящиеся к этой лиге.
Просто переопределите метод get_context
def get_context_data(self,**kwargs):
context = super(LeagueListView,self).get_context_data(**kwargs)
league = League.objects.get(slug=kwargs.get('slug'))
context['teams'] = Team.objects.filter(league_id=league.id)
return context