【问题标题】:Saving a comment object to a post in a blog in django database将评论对象保存到 django 数据库中博客中的帖子
【发布时间】:2016-11-01 08:52:36
【问题描述】:

我正在制作一个简单的帖子和评论页面。在此,当我对帖子发表评论时,我试图将该评论保存在数据库中。我正在检索使用其 id 发表评论的帖子的标题.但是当我尝试通过执行 cmets.post_title=header.title 来实例化 Post_Comment 的 post_title 属性时,它会给出一个值错误,说无法分配“u'kjashdkh'”:“Post_Comment.post_title”必须是“Post”实例。请注意,“kjashdkh”是帖子标题。

class Post(models.Model):
    title= models.CharField (max_length=100)

    body= models.TextField ()

    created=models.DateTimeField()

    def __str__(self):
        return self.title



class Post_Comment(models.Model):
    comment= models.TextField() 
    post_title=models.ForeignKey(Post)

而我的看法是:

def comment(request,pk):
    header=Post.objects.get(id=pk)
    comments=Post_Comment(comment=request.POST['comment'])
    comments.post_title=header.title
    header.delete()

    comments.save()
    return HttpResponseRedirect('/blog/')

【问题讨论】:

  • 嗯?错误很明显。您已经设置了post_title=models.ForeignKey(Post),所以它需要一个Post 对象,但您给它的是header.title,它是一个CharField,或一个字符串对象。似乎您对 Django 中的外键如何工作有一个根本的误解。你读过教程吗?
  • 谢谢大佬。我在使用外键方面有点新手。但是我应该如何纠正这个问题。
  • 我猜你可以comments.post_title = header,但你不能删除下一行的博文(header.delete())。您应该考虑更准确的变量名称。将博客文章称为“标题”并在稍后引用它“post_title”会使这非常令人困惑。

标签: python-2.7 django-models django-views


【解决方案1】:
def comment(request,pk):
    post = Post.objects.get(id=pk)

    comment = Post_Comment.objects.create(post_title=post, comment=request.POST['comment'])

    return HttpResponseRedirect('/blog/')

注意命名。你的模型应该是这样的:

class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title

class Comment(models.Model):
    body = models.TextField() 
    post = models.ForeignKey(Post, related_name='comments')

【讨论】:

  • 我不知道添加相关名称的目的
  • 为方便起见...您可以将该名称用于反向关系:post.comments.all()
  • 是的。终于。再问一个问题。我正在使用 listview 来显示所有最近的帖子,为此我提供的查询集来自 Post 模型。我问我可以将查询集设置为 Post_Comment 模型并使用它的 post 属性访问 Post 模型。所以我的全部我的帖子及其各自的 cmets 都将使用单个 urlconfiguration 显示
  • 您不必这样做。在模板中只显示每个帖子的 cmets...{% for comment in post.comments.all %}{{ comment }}{% endfor %}
  • 我已经这样做了。它不起作用。因为当我们的查询集使用没有评论属性的 Post 模型时,我认为我们不能做 post.comment
猜你喜欢
  • 1970-01-01
  • 2011-03-30
  • 2021-04-16
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2013-11-21
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多