在我的应用程序中,我有一个显示文章和相关评论列表的视图。授权用户可以发表评论或几个评论,而我已经意识到了这一功能。我遇到的麻烦是如何使用户可以编辑或删除他们的评论。棘手的是,所有这些操作(添加,编辑,删除)都应在同一页面上执行。实现此目标的最佳方法是什么?
模型:
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]
答案 0 :(得分:0)
您应该使用ajax调用来管理它。 这是管理此问题并停留在同一页面上的最“简便”方法。