ValueError: Cannot assign "'2'": "Comment.article" must be a "Article" instance
报错中出现类似ValueError: Cannot assign "'XXX'": "Comment.article" must be a "XXX" instance时:
该错误通常是models.py里定义时以A_B的命名格式时会出现的问题
解决方案:只要将需要传参数的外键字段后直接加上_id即可
附上代码:
修改前:
models.py
# 文章评论表 class Comment(models.Model): user = models.ForeignKey(to='Userinfo') article = models.ForeignKey(to='Article') content = models.CharField(verbose_name='评论内容', max_length=255) comment_time = models.DateField(verbose_name='评论时间', auto_now_add=True) parent = models.ForeignKey(to='self', null=True) def __str__(self): return self.content
views.py
def comment(request): if request.is_ajax(): back_dic = {'code': 10000, 'msg': ''} if request.method == 'POST': if request.user.is_authenticated(): article = request.POST.get('article_id') content = request.POST.get('content') with transaction.atomic(): models.Article.objects.filter(pk=article_id).update(comment_num=F('comment_num')+1) models.Comment.objects.create(user=request.user, article=article_id, content=content) back_dic['msg'] = '评论成功' else: back_dic['code'] = 10001 back_dic['msg'] = '请先登录' return JsonResponse(back_dic)
修改后:
views.py
def comment(request):
if request.is_ajax():
back_dic = {'code': 10000, 'msg': ''}
if request.method == 'POST':
if request.user.is_authenticated():
article_id = request.POST.get('article_id')
content = request.POST.get('content')
with transaction.atomic():
models.Article.objects.filter(pk=article_id).update(comment_num=F('comment_num')+1)
models.Comment.objects.create(user=request.user, article_id=article_id, content=content
back_dic['msg'] = '评论成功'
else:
back_dic['code'] = 10001
back_dic['msg'] = '请先登录'
return JsonResponse(back_dic)
愿君前程似锦,归来仍是少年