#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 файл уже указан вверху.