Я новичок в Джанго и в программировании в целом. Создал систему комментариев, где есть родительский комментарий и дочерний (ответ на родительский). И к форме привязал WYSIWYG редактор summernote для редактирования текста (как в stackoverflow). При написании основного комментария (родительского) всё отображает. А при отправке дочернего просто перезагружает страницу и ничего не появляется (соответственно, не сохраняет в базу данных тоже)Я новичок в Джанго и в программировании в целом. Создал систему комментариев, где есть родительский комментарий и дочерний (ответ на родительский). И к форме привязал WYSIWYG редактор summernote для редактирования текста (как в stackoverflow). При написании основного комментария (родительского) всё отображает. А при отправке дочернего просто перезагружает страницу и ничего не появляется (соответственно, не сохраняет в базу данных тоже)
models.py
class Comments(models.Model):
parent = models.ForeignKey(
'self',
on_delete=models.CASCADE,
blank=True,
null=True,
related_name='Replies',
)
author = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='Author',
related_name='Comments'
)
article = models.ForeignKey(
News,
on_delete=models.CASCADE,
related_name='Comments',
verbose_name='Article'
)
text = models.TextField(
verbose_name='Text',
)
created_date = models.DateTimeField(
auto_now_add=True,
verbose_name='Created date',
)
comment_like = models.IntegerField(
verbose_name='Like',
default=0,
)
comment_dislike = models.IntegerField(
verbose_name='Dislike',
default=0,
)
class Meta:
ordering = ['created_date']
def __str__(self):
return f'{self.author}, {self.text}'
views.py
def create_comment(request, item):
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
parent_obj = None
try:
parent_id = int(request.POST.get('parent_id'))
except:
parent_id = None
if parent_id:
parent_obj = Comments.objects.get(id=parent_id)
if parent_obj:
replay_comment = comment_form.save(commit=False)
replay_comment.parent = parent_obj
new_comment = comment_form.save(commit=False)
new_comment.article = item
new_comment.author = request.user
new_comment.save()
return new_comment
def news_items(request, news_pk):
items = get_object_or_404(News, pk=news_pk)
comments = Comments.objects.filter(article=news_pk)
best_comment = None
for i in comments:
if i.comment_like > 0:
best_comment = comments.order_by('-comment_like').first()
if request.method == 'POST':
create_comment(request, items)
return redirect('news:news_items', news_pk=items.pk)
else:
comment_form = CommentForm()
context = {
'items': items,
'categories': category(),
'comments': comments,
'comment_form': comment_form,
'best_comment': best_comment,
}
return render(request, 'news/news_items.html', context)
forms.py
from django import forms
from django_summernote.widgets import SummernoteWidget
from news.models import Comments
class CommentForm(forms.ModelForm):
text = forms.CharField(widget=SummernoteWidget())
class Meta:
model = Comments
fields = (
'text',
)
кусок кода из шаблона:
<!--Для основного-->
<div class="comment-form">
<div class='form-wrap'>
<form action="." method="post" style="display: flex; width: 100%">
{{ comment_form.media }}
{{ comment_form.text }}
{% csrf_token %}
<div style="padding-left: 10px;">
<input class="btn btn-primary" type="submit" value="Высказаться"></div>
</form>
</div>
</div>
<!--Для дочернего-->
<div class="reply-form">
<div class='reply-form-wrap'>
<form action="." method="post" style="display: flex; width: 100%">
{{ comment_form.media }}
{{ comment_form.text }}
{% csrf_token %}
<input type="hidden" name="parent_id" value="{{ comment.id }}">
<div style="padding-left: 10px;">
<input class="btn btn-primary" type="submit" value="Ответить">
</div>
</form>
</div>
</div>
Помогите, пожалуйста, разобраться. Или хотя бы объясните, почему не срабатывает. Т.к. при таких же условиях, только при использовании стандартной джанговской формы всё работает хорошо.