В моем приложении у меня есть вид, показывающий статью и список связанных комментариев.Авторизованный пользователь может оставить комментарий или несколько комментариев, и я уже понял эту функциональность.Я застрял в том, как сделать так, чтобы пользователь мог редактировать или удалять свои комментарии.Сложность в том, что все эти действия (добавление, редактирование, удаление) должны выполняться на той же странице .Каков наилучший подход для достижения этой цели?
Модель:
class Comment(models.Model):
comments = models.ForeignKey(NewsItem, on_delete=models.CASCADE, blank=True, null=True, related_name='comments')
text = models.TextField(blank = False)
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
create_date = models.DateTimeField(default=timezone.now)
Форма:
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ['text',]
Вид:
<...>
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
new_comment = form.save(commit=False)
new_comment.comments = NewsItem(id = newsitem_id)
new_comment.author = User(id = request.user.id)
new_comment.save()
return HttpResponseRedirect(reverse('news:newsitem_slug', args=(newsitem_id, slug)) + '#comment_{0}'.format(new_comment.id))
else:
form = CommentForm()
<...>
Шаблон:
{% if user.is_authenticated %}
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit_button" value="Leave a comment">
</form>
{% endif %}
И это список комментариев, где должна быть размещена форма для редактирования:
<ul>
{% for comment in newsitem.get_active_comments %}
<li>{{ comment.text }}<br>
{{ comment.author }} </li>
{% if comment.author == user %}
The form for editing and the button for deleting should be here.
{% endif %}
{% endfor %}
</ul>
Страница должна выглядеть так:
Caption
Text text text text text text
text text text text text text.
Comments:
Comment 1 by an authorised user
Edit | Delete
Comment 2
Comment 3 by an authorised user
Edit | Delete
Comment 4
Comment 5
Write a comment [Form]