Django получает атрибут из URL в фильтр - PullRequest
0 голосов
/ 09 мая 2019

Привет, я новичок в django, и я пытаюсь создать сайт, который будет содержать сериалы с сезонами и эпизодами.

Я успешно создал CreateView для серии. Теперь я собираюсь сделать CreateView для сезона. Это должно выглядеть примерно так.

Времена года
[1] [2] [3] [добавить]

Если вы нажмете добавить, он должен показать модал с формой для сезона. Мой код выглядит так:

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)

urls.py

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

views.py

class SeasonCreateView(LoginRequiredMixin, CreateView):
    model = Season
    fields = ['order']

    def get_context_data(self, **kwargs):
        context = super(SeasonCreateView, self).get_context_data(**kwargs)
        context.update({
            'serie': Serie.objects.filter()
        })
        return context

season_form.html

{% for season in serie.season_set.all %}
...
{% endfor %}

Что мне нужно записать в фильтр (), чтобы я получил Serie из URL?

Ответы [ 3 ]

1 голос
/ 10 мая 2019

Получение параметра из URL:

parameter = request.GET.get("parameter_name")

Фильтрация:

'serie': Serie.objects.filter(model_field_name=parameter)
0 голосов
/ 13 мая 2019

Хорошо, получил это сам. Я использовал get_object_or_404

def get_context_data(self, **kwargs):
    s = get_object_or_404(Serie, id=self.kwargs.get('pk'))
    context = super(SeasonCreateView, self).get_context_data(**kwargs)
    context.update({
        'serie': s
    })
    return context
0 голосов
/ 09 мая 2019
{% for season in serie.season_set.all %}

<p>{season}</p>
{% endfor %}

Пожалуйста, попробуйте all () вместо all in для определения цикла.

...