在同一页面上添加和编辑评论

时间:2019-01-20 23:29:20

标签: django-forms django-views

在我的应用程序中,我有一个显示文章和相关评论列表的视图。授权用户可以发表评论或几个评论,而我已经意识到了这一功能。我遇到的麻烦是如何使用户可以编辑或删除他们的评论。棘手的是,所有这些操作(添加,编辑,删除)都应在同一页面上执行。实现此目标的最佳方法是什么?

模型:

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]

1 个答案:

答案 0 :(得分:0)

您应该使用ajax调用来管理它。 这是管理此问题并停留在同一页面上的最“简便”方法。