【发布时间】: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