Как использовать 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 file

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
Вернуться на верх