【发布时间】:2016-01-28 17:24:54
【问题描述】:
这似乎是一个愚蠢的问题,但并没有消失。 我的目标是制作一个简单的发布、分享、评论、点赞等应用程序。 大多数功能似乎都可以在帖子上发布和评论。 所以我有一个名为 UserPost 的模型和另一个名为 Comments 的模型。评论模型字段有一个comment_liked_by字段,它是与Django用户模型的多对多关系,它基本上是存储喜欢特定评论的用户。这是我的models.py:-
class UserPost(models.Model):
post_created = models.DateTimeField(auto_now_add= True)
post_last_edit = models.DateTimeField(auto_now=True)
post_text_body = models.TextField(verbose_name='Share Yourself')
post_user_handle = models.ForeignKey(User,verbose_name='Username',default=User,on_delete=models.CASCADE)
post_share = models.BooleanField(default=True,verbose_name='Public')
#post_image = models.ImageField(blank=True,verbose_name='Add a Photo')
def __str__(self):
return (self.post_user_handle.first_name+" "+self.post_user_handle.last_name)
def get_absolute_url(self):
return reverse('feedviews')
class Meta:
verbose_name = "Latest Post"
verbose_name_plural = "Latest Posts"
ordering = ["-post_created"]
class Comments(models.Model):
comment_body = models.TextField(verbose_name="Add Comment")
comment_likes = models.IntegerField(default= 0)
comment_created = models.DateTimeField(auto_now=True)
comment_user_handle = models.OneToOneField(User,default=User,related_name='Commented_by')
comment_post = models.ForeignKey(UserPost,verbose_name='Post ID')
comment_liked_by = models.ManyToManyField(User,related_name='Like_List')
def __str__(self):
return (self.comment_user_handle.first_name+" "+self.comment_user_handle.last_name+"\n"+self.comment_body+"\n")
class Meta:
verbose_name = "Latest Comment"
verbose_name_plural = "Latest Comments"
ordering = ["-comment_created"]
在 views.py 中,我调用了一个函数,该函数获取 post_id 、 comment_id 和 username 的参数来识别当用户喜欢评论时必须更新的评论对象。这是我的 views.py :-
def LikeComment(request,username,post_id,comment_id):
user = User.objects.get(username=username)
post = UserPost.objects.get(post_user_handle=user,id=post_id)
comment = post.comments_set.get(id = comment_id)
comment.comment_liked_by.add(request.user)
comment.save()
return HttpResponseRedirect('/')
问题是每次我运行服务器并且用户单击,将 request.user 添加到 comment_liked_by 集时,我都会收到一个操作错误,没有名为 comment_liked_by 的此类表。我已经运行了 makemigration 和 migrate 没有问题。我哪里出错了?与用户模型和多对多关系字段的onetoone关系是否冲突?我试图用外键来实现它,但这似乎更复杂。提前致谢。
【问题讨论】:
-
在你的 django shell 中尝试一下,看看是不是一样。还可以尝试您的 db shell 并手动检查该字段是否存在并且名称是否正确。
标签: django python-3.x django-models many-to-many