Задать вопрос
  • Как выводить комментарии под постом от имени авторизованного пользователя в django?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    В models.py username поменяйте на ForeignKey
    from django.contrib.auth.models import User
    
    class Comments(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь')
        text_comments = models.TextField('Текст комментария', max_length=200)
        post = models.ForeignKey(Post, verbose_name='Публикация', on_delete=models.CASCADE)
    
        def __str__(self):
            return f'{self.user.username} / {self.post}'

    В form.py исключите name
    class CommentsForm(forms.ModelForm):
        class Meta:
            model = Comments
            fields = ('text_comments',)

    В views.py добавьте поле user
    class AddComments(View):
        def post(self, request, post_id):
            form = CommentsForm(request.POST)
            if form.is_valid():
                comment = form.save(commit=False)
                comment.post_id = post_id
                comment.user = request.user 
                comment.save()
            return redirect('post_detail', post_id=post_id)

    В post_detail.html добавьте user.username
    <div>
        <h3>Комментарии:</h3>
        <form action="{% url 'add_comments' post.id %}" method="post">
            <h3></h3>
            {% csrf_token %}
            <div>
                <textarea name="text_comments" placeholder="Ваш комментарий..."></textarea>
            </div>
            <div><input type="submit"></div>
        </form>
    </div>
    <div>
        {% for comment in post.comments_set.all reversed %}
        <div class="view-comment">
            <h4>{{ comment.user.username }}</h4>
            <p><i>{{ comment.text_comments }}</i></p>
        </div>
        {% endfor %}
    </div>

    Должно работать
    Ответ написан
    9 комментариев
  • Как выводить комментарии под постом от имени авторизованного пользователя в django?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Добавьте в комментарий внешний ключ к модели юзера с возможностью оставить его пустым (как и name)
    При отрисовки формы ввода/сохранении коммента проверяйте, авторизирован ли пользователь. И в зависимости от этого выбирайте что записать.
    Ответ написан
    4 комментария
  • Почему комментарии добавляются и выводятся на страницу только через админ панель в django?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    В urls.py для комментариев измените на
    path('posts/<int:post_id>/add_comment/', views.AddComments.as_view(), name='add_comments'),

    В views.py
    class Home(View):
        def get(self, request):
            post_title = Post.objects.all()
            return render(request, 'forum/home.html', {'post_title': post_title})
    
    class Blog(View):
        def get(self, request):
            post = Post.objects.all()
            print(post)
            return render(request, 'forum/blog.html', {'post': post})
    
    class PostDetail(View):
        def get(self, request, post_id):
            post = Post.objects.get(id=post_id)
            return render(request, 'forum/post_detail.html', {'post': post})
    
    class AddComments(View):
        def post(self, request, post_id):
            form = CommentsForm(request.POST)
            if form.is_valid():
                comment = form.save(commit=False)
                comment.post_id = post_id
                comment.save()
            return redirect('post_detail', post_id=post_id)

    Так должно всё работать
    Ответ написан
    3 комментария