Добавление и редактирование комментариев на одной странице - PullRequest
0 голосов
/ 21 января 2019

В моем приложении у меня есть вид, показывающий статью и список связанных комментариев.Авторизованный пользователь может оставить комментарий или несколько комментариев, и я уже понял эту функциональность.Я застрял в том, как сделать так, чтобы пользователь мог редактировать или удалять свои комментарии.Сложность в том, что все эти действия (добавление, редактирование, удаление) должны выполняться на той же странице .Каков наилучший подход для достижения этой цели?

Модель:

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 голосов
/ 21 января 2019

Вы должны управлять этим с помощью вызовов ajax. Это самый «простой» способ управлять этим и оставаться на той же странице.

...