Джанго: использовать 2-й аргумент, заданный URL - PullRequest
0 голосов
/ 06 мая 2019

Я хочу создать сайт Django, где я могу загружать сериалы с сезонами и эпизодами. В конце это должно выглядеть примерно так:

Сезоны:

[1] [2] [3]

Эпизодов:

[1] [2] [3] [4] [5] [6]  

Эпизоды относятся к сезону, указанному в URL.

Мой код выглядит так:

models.py:

class Serie(models.Model):
    title = models.CharField(max_length=120)
    thumbnail = models.ImageField(upload_to=serie_dir_path)
    ...


class Season(models.Model):
    order = models.IntegerField()
    serie = models.ForeignKey(Serie, on_delete=models.CASCADE)
    ...

class Episode(models.Model):
    title = models.CharField(max_length=120)
    order = models.IntegerField()
    episode = models.FileField(upload_to=episode_dir_path)
    season = models.ForeignKey(Season, on_delete=models.CASCADE)
    ...

views.py:

class SeriesDetailView(DetailView):
    model = Serie

    def get_context_data(self, **kwargs):
        context = super(SeriesDetailView, self).get_context_data(**kwargs)
        context.update({
            'seasons': Season.objects.all(),
            'episodes': Episode.objects.all()
        })
        return context

urls.py:

urlpatterns = [
    path('library', LibListView.as_view(), name='library'),
    path('series/<int:pk>/season/<int:order>', SeriesDetailView.as_view(), name='serie-detail'),
]

lib.html:

<a href="{% url 'serie-detail' serie.id 1 %}">

(1, потому что я хочу первый сезон)

serie_detail.html:

<section class="section mt-5">
        <div class="container">
        <h1>{{ serie.title }}</h1>
        <img class="card-img-top mb-2" src="{{ serie.thumbnail.url }}" style="height: 319px; width: 220px;">
        <h6>Uploaded by: <h6 class="category text-warning"> {{serie.createdUser.username}}</h6></h6>
            <div class="row">
                <h4 class="mb-0">Seasons:</h4>
            </div>
            <div class="row">
            {% for season in serie.season_set.all %}
                <a href="" class="btn btn-default float-left">{{ season.order }}</a>
            {% endfor %}
            </div>
            <div class="row">
                <h4 class="mb-0">Episodes:</h3>
            </div>
            <div class="row">
            {% for season in serie.season_set.all %}
                {% for episode in season.episode_set.all %}
                    <a href="{% url 'episode-detail' episode.id %}" class="btn btn-default float-left btn-sm">{{ episode.order }}</a>
                {% endfor %}
            {% endfor %}
            </div>
        </div>
    </section>

С кодом выше результат выглядит так:

Сезоны:

[1] [2]  

Эпизодов:

[1] [1] 

Он берет первый эпизод 2-го сезона, а также показывает, что.

Я благодарен за любую помощь.

1 Ответ

0 голосов
/ 06 мая 2019

Полагаю, вам нужно отобразить все эпизоды сезонов только одного конкретного сезона (в данном случае сезон 1). Вам нужно изменить код примерно так:

class SeriesDetailView(DetailView):
    model = Serie

    def get_context_data(self, **kwargs):
        order = kwargs.get("order")
        context = super(SeriesDetailView, self).get_context_data(**kwargs)
        context.update({
            'seasons': Season.objects.all(),
            'episodes': Episode.objects.filter(season=order)
        })
        return context
...