Задать вопрос
@gromyko21

Как автоматически привязать посты к коментариям?

В общем есть небольшой проект. Через формы получается привязать, только если выбирать в окне выбора(в форме post) к чему оставляем комментарий, но нужно, чтобы это было сделано без участия пользователя.5f4e329732c81505586978.png
Модель
class Article(models.Model):
    """
    Модель для создания новостей на главной странице
    """
    #переменные модели

    def get_absolute_url(self):
        return reverse('articles_url', kwargs={'slug': self.slug})

class Comment(models.Model):
    post = models.ForeignKey(Article, related_name='post', on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=u"Автор", related_name="author")
    body = models.TextField(max_length=1000)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


Вью
def articles(request, slug):
    articles = get_object_or_404(Article, slug__iexact=slug)
    #Комментарии

    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            form.instance.author = request.user
            #form.instance.post = request.article
            #Я думаю, что нужно корректировать строку выше
            form.save()
            return redirect("/")
        else:
            pass
            #messages.error(request, ('Пожалуйста, исправьте ошибки.'))
    else:
        form = CommentForm(instance=request.user)
    comment = Comment.objects.order_by('-pk')
    context = {
        'form':form,
        'comments': comment,
        'articles': articles,
    }
    return render(request, 'home/one_news.html', context)

Тут, как я полагаю, нужно как-то через вью привязывать, но как именно не понимаю.
NOT NULL constraint failed: home_comment.post_id вот такая ошибка выходит, если не выводить переменную post через форму.
И как показывать комментарии только у той статьи, к которой они относятся? comment = Comment.objects.order_by('-pk') вот этот вариант показывает на странице каждой статьи все комментарии.
  • Вопрос задан
  • 157 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Realmixer
Full stack Python (Django) web-developer
post = models.ForeignKey(
    Article,
    related_name='post',
    on_delete=models.CASCADE,
    editable=False  # !!!
)

def article(request, slug):
    article = get_object_or_404(Article, slug__iexact=slug)

    # Комментарии
    if request.method == 'POST':
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            comment_form.instance.author = request.user
            comment_form.instance.post = article
            comment_form.save()
            return redirect('/')
    else:
        comment_form = CommentForm()

    comments = Comment.objects.order_by('-pk')
    context = {
        'article':      article,
        'comments':     comments,
        'comment_form': comment_form,
    }
    return render(request, 'home/one_news.html', context)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы