Отправка сообщения формы из другого представления с полем ввода
Я относительно новичок в Django и делаю небольшой "социальный" проект. В основном он состоит из профилей пользователей, и на этих профилях можно размещать "комментарии".
У меня есть представление, которое отображает комментарии каждого пользователя, и отдельное представление, которое позволяет публиковать комментарии. Это работает так, как ожидалось.
Проблема, с которой я сейчас сталкиваюсь, заключается в следующем. - У меня есть поле < input type=text > в представлении для просмотра комментариев, и я хочу иметь возможность опубликовать комментарий оттуда и сохранить его в базе данных. Я пытался захватить kwargs post в форме, но не смог добиться корректной работы, тем не менее, чтобы комментарий сохранялся автоматически. Как я могу это сделать?
Вот код, который у меня есть на данный момент.
Просмотр комментариев:
class CommentsView(auth_mixins.LoginRequiredMixin, views.ListView):
model = ProfileComments
template_name = 'comments/comments_view.html'
paginate_by = 5
def get_queryset(self):
receiver = PROFILE_MODEL.objects.get(pk=self.kwargs['pk'])
if receiver:
return self.model.objects.filter(receiver=receiver)
return None
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
receiver = PROFILE_MODEL.objects.get(pk=self.kwargs['pk'])
if receiver:
context.update({
'receiver': receiver
})
return context
Просмотреть комментарии:
class CreateCommentView(auth_mixins.LoginRequiredMixin, views.CreateView):
form_class = CommentsForm
template_name = 'comments/post_comment.html'
@staticmethod
def get_profile_model_by_pk(pk):
return PROFILE_MODEL.objects.get(pk=pk)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['author'] = self.request.user.userprofile
kwargs['receiver'] = self.get_profile_model_by_pk(self.kwargs['pk'])
return kwargs
def get_success_url(self):
return reverse_lazy('comments', kwargs={'pk': self.kwargs['pk']})
Это шаблон для просмотра комментариев, вот код для ввода, который я использую:
<div style="width: 1310px ;margin: 0 auto">
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3"
method="POST" action="{% url 'post comment' pk=receiver.pk %}">
{% csrf_token %}
<input type="text" name="post_comment_text"
class="form-control" placeholder="Leave a comment" aria-label="Leave a comment">
</form>
</div>