Всем привет.
Ситуация:
Есть модель Course (курс) - есть модель Creview (Отзыв курса) - Есть стандартная модель User (пользователь). Задача сделать так, чтобы авторизованные пользователи могли оставлять свои отзывы.
Как я сделал:
models.pyclass Course(models.Model):
....
class Creview(models.Model):
creview = models.ForeignKey(Course, on_delete=models.CASCADE, default=1)
userview = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
review = models.TextField(help_text="Отзыв", verbose_name="Сам отзыв о курсе")
forms.pyclass CreviewForm(forms.Form):
review = forms.CharField(widget=forms.Textarea, label='Ваш отзыв', required=False)
html.страница<form action="/addcreview{{ courseitem.id }}" method="post">
{% csrf_token %}
<input type="hidden" name="userfromform" value="{{ user.id }}">
{{ form.as_p }}
<input type="submit" class="expanded button" value="ОПУБЛИКОВАТЬ">
</form>
view.pydef addcreview(request, add_id):
token = csrf(request)
if request.POST:
course = Course.objects.get(id = add_id)
user_id = request.POST.get('userfromform', '')
user = User.objects.get(id = user_id)
form = CreviewForm(request.POST)
if form.is_valid():
review = form.cleaned_data['review']
review_obj = Creview(creview=course, userview=user, review=review)
review_obj.save()
return redirect('/course'+ add_id, token)
И вся эта штука работает так:
Я ручками передаю в html ID текущего юзера, и форму. Во время клика по кнопку "Добавить" я также передаю id текущего курса и:
- Нахожу объект текущего курса
- Нахожу объект текущего юзера
- Забираю текст из формы.
- Создаю новый объект отзывы, в который передаю все данные.
Работает, но мне кажется, что я как-то не так это делаю. Как можно это все дело сделать правильно?