ValueError при создании формы комментариев Django - PullRequest
1 голос
/ 19 марта 2019

У меня проблема при создании формы комментария с django. После того, как я написал мои view.py, models.py и html, я получил ValueError, который сказал:

Cannot assign "<class 'blog.models.post'>": "Comment.post" must be a "post" instance". 

Ниже приведены мои коды.

HTML

{% block content %}
<h1>Add New Comment:</h1>
<form method='POST' action=''>
    {% csrf_token %}
    {{ form.as_p }}
<button type='submit'>Submit</button>
</form>
{% endblock %}

views.py

def add_comment(request, slug):
    po = get_object_or_404(post, slug=slug)
    if request.method == 'POST':
        form = CommentForm(request.POST or None)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('blog:post', slug=post.slug)
    else:
        form = CommentForm()
    return render(request, 'blog/post/add_comment.html', {'form': form})

models.py

class Comment(models.Model):
    post = models.ForeignKey(post, related_name='comments', on_delete=models.CASCADE)
    user = models.CharField(max_length=250)
    email = models.EmailField() 
    body = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    approved = models.BooleanField(default=False) 

    def approved(self):
        self.approved = True
        self.save()

    def __str__(self):
        return self.user

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Сообщение, которое вы извлекли из базы данных: po:

po = get_object_or_404(post, slug=slug)

Поэтому вы должны установить form.post = po:

def add_comment(request, slug):
    po = get_object_or_404(post, slug=slug)
    if request.method == 'POST':
        form = CommentForm(request.POST or None)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = po
            comment.save()

Обратите внимание, что обычно в Django вы используете Post для вашей модели и post для экземпляра, который вы выбираете из базы данных.

0 голосов
/ 19 марта 2019

Попробуйте:

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comments', on_delete=models.CASCADE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...