【问题标题】:Django : Operational Error while using ManytoMany FieldDjango:使用多对多字段时出现操作错误
【发布时间】: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


【解决方案1】:

我无法重现您的错误,但我发现了一些奇怪的东西。 在模型 Comments 中,字段 comment_user_handle 有一个不正确的默认值。我建议删除它。

这可能是因为 Django 没有更新数据库。

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,related_name='Commented_by')**
    comment_post  = models.ForeignKey(UserPost,verbose_name='Post ID')
    comment_liked_by = models.ManyToManyField(User,related_name='Like_List')

【讨论】:

  • 这样做后没有变化。仍然得到相同的错误 no such table comment_liked_by
猜你喜欢
  • 2021-11-21
  • 2014-02-05
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2018-09-03
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多