как узнать название фильма который отображается на страничке?
У меня есть модель Movies, мне нужно добавить комменарий к фильму, а для этого узнать (название) какой именно фильм сейчас отображается на страничке, как это сделать?
упрощенная models
class Movies(models.Model):
title = models.CharField("Название", max_length=70)
упрощенная url
path('films/<int:pk>', views.MoviePageListView.as_view(), name='single-page')
views
class MoviePageListView(DetailView):
model = Movies
template_name = 'movies/show.html'
context_object_name = 'movie_pg'
def get_context_data(self, **kwargs):
ctx = super(MoviePageListView, self).get_context_data(**kwargs)
ctx['news'] = news
ctx['rat_movie'] = rat_movie
return ctx
Ответы (1 шт):
создать модель Reviews
class Reviews(models.Model):
"""Отзывы"""
name = models.CharField("Имя", max_length=70)
text = models.TextField("Сообщение", max_length=5000)
product = models.ForeignKey(Movies, verbose_name="фильм", on_delete=models.CASCADE, null=True,blank=True)
class Meta:
verbose_name = "Отзыв"
verbose_name_plural = "Отзывы"
создать форму(файл forms.py)
class ReviewForm(forms.ModelForm):
"""Форма отзывов"""
class Meta:
model = Reviews
fields = ("name", "text")
Дальше добавить форму в DetailView
class MoviePageListView(DetailView):
model = Movies
template_name = 'movies/show.html'
context_object_name = 'movie_pg'
def get_context_data(self, **kwargs):
ctx = super(MoviePageListView, self).get_context_data(**kwargs)
ctx['form'] = ReviewForm()
ctx['news'] = news
ctx['rat_movie'] = rat_movie
return ctx
теперь осталось вывести форму. Для этого на странице с фильмом надо добавить
<h3>Оставить отзыв</h3>
<form action="{% url 'add_review' movie_pg.id %}" method="post">
{% csrf_token %}
<label>Ваш комментарий</label>
<br>
{{form}}
<button type="submit">Отправить</button>
</form>
в этой строчке <form action="{% url 'add_review' movie_pg.id %}" method="post"> указанно на какой url отправлять обработку комментария.
Теперь создадим само обработку.
Создадим класс c методом post. В метода post передаем параметры(self, request, pk). Pk нужен для привязки комментария к фильму. А сам pk мы получаем отсюда movie_pg.id пару строчек выше в form мы передали это значение.
class AddReview(View):
"""Отзывы"""
def post(self, request, pk):
form = ReviewForm(request.POST)
movie = Movies.objects.get(id=pk)
if form.is_valid():
form = form.save(commit=False)
form.movie = movie
form.save()
return redirect('/')
последнем шагом останется добавить сам url. В файл urls.py приложения добавить
path("review/<int:pk>/", views.AddReview.as_view(), name="add_review")