Как добавлять комментарии к сообщениям Python Django с зарегистрированным именем пользователя?

#python #django

#python #django

Вопрос:

Пожалуйста, дайте мне знать, где я допускаю ошибку? views.py

 class AddComment(LoginRequiredMixin, CreateView):

    model = Comment
    form_class = CommentForm
    template_name = 'comment.html'

    success_url = reverse_lazy('home')

    def form_valid(self, form):
        form.instance.name = self.request.user
        form.instance.post_id = self.kwargs['pk']
        return super().form_valid(form)
  

Правильно ли написаны эти формы?
forms.py
класс CommentForm(формы.ModelForm):
класс Meta:
модель = Комментарий
поля = (‘body’, )

         widgets = {
            # 'name': forms.TextInput(attrs={'class': 'form-control'}),
            'body': forms.Textarea(attrs={'class': 'form-control'}),
        }
  

Должен ли я вносить какие-либо изменения в модели?
models.py

 class Comment(models.Model):
    post = models.ForeignKey(Post,
                             related_name='comments',
                             on_delete=models.CASCADE)
    name = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
    )
    body = models.TextField(max_length=240)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s - %s' % (self.post.title, self.name)
  

Это раздел комментариев, позволяющий пользователю комментировать сообщение с указанием собственного имени?
comments.html

 {% if not object.comments.all %}
    <p>No comments yet...</p>
    <a href="{% url 'comment' object.pk %}">Add one</a>
    {% else %}
    <a href="{% url 'comment' object.pk %}">Add Comment</a>
    <br><br>
    {% for comment in object.comments.all %}
    <strong>{{ comment.name }} </strong> - <small>{{ comment.date_added }}</small>
    <br>
    {{ comment.body }}
    <br><br>
    <hr>
    {% endfor %}
    {% endif %}
  

Вот URL-адреса AddComment class view.
urls.py

 path('post/<int:pk>/comment/', AddComment.as_view(), name='comment'),][1]
  

Ответ №1:

Вы не указали четко, что пошло не так с вашим кодом. Я хотел бы дать несколько предложений. Прежде всего,

 {% for comment in object.comments.all %}
   ...
{% endfor %}
  

Вы помещаете этот блок кода внутрь {%, если не object.comments.все %}…{% endif %} поэтому он не будет отображаться в шаблоне, если раздел комментариев не пуст.

Кроме того, эта ссылка:

 <a href="{% url 'comment' object.pk %}">Add Comment</a>
  

следует открыть форму шаблона Django, где пользователь может фактически заполнить комментарий. После этого, по запросу POST формы, данные комментария будут отправлены на URL, который вы указали в параметре действия формы, как показано ниже:

 <form action="{% url 'comment' post.pk %}" method="post">
[Comment code here]
</form>
  

который будет ссылаться на указанный вами URL-адрес:

 path('post/<int:pk>/comment/', AddComment.as_view(), name='comment'),]
  

Будет лучше, если вы сможете предоставить свой код в views.py а также для облегчения отслеживания того, где что-то идет не так.

Комментарии:

1. Спасибо за ваши предложения. но Views.py файл уже указан вверху.