目前,我正在尝试通过Ajax提交为我的网站实现“添加评论”功能。但是,我在提交评论时总是得到500 Internal Server Error
。我检查了Chrome控制台,发现它显示"TypeError at /articles/test_1 get() got an unexpected keyword argument 'id'"
(此处test_1
是本文的内容)。我对此错误感到困惑。有人可以帮我吗?
我的 models.py :
class Article_comments(models.Model):
post = models.ForeignKey(Article, on_delete=models.CASCADE)
nicknames = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='UserProfile_nickname')
comment = models.TextField(max_length=3000)
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = 'Article comments'
verbose_name_plural = verbose_name
ordering = ['-timestamp']
def __str__(self):
return '{}-{}'.format(self.post.article_ti, str(self.nicknames.nickname), self.nicknames.avatar, self.nicknames.qq, self.nicknames.motto, self.nicknames.create_time, self.nicknames.user_url)
我的 views.py
def article_details(request, slug):
article_detail = get_object_or_404(Article, slug=slug)
comments = Article_comments.objects.filter(post=article_detail).order_by('-timestamp')
paginator_comment = Paginator(comments, per_page=5)
page_var = 'page'
page = request.GET.get(page_var, 1)
try:
sets = paginator_comment.page(page)
except PageNotAnInteger:
sets = paginator_comment.page(1)
except EmptyPage:
sets = paginator_comment.page(paginator_comment.num_pages)
# Here is the ajax code:
if request.method == 'POST':
if request.is_ajax():
user = request.user
usr_nc = UserProfile.objects.filter(usr=user)
cmt_user = usr_nc
cmt_art_id = request.POST.get('article_id')
cmt_body = request.POST.get('body')
article = request.POST.get(id=cmt_art_id)
slug = slug
comments = Article_comments.objects.create(nicknames=cmt_user, comment=cmt_body, post=article)
comments.save()
return JsonResponse({'msg': 'Comments successfully submitted!'})
article_detail.view_sum()
return render(request, 'article_detail.html', {'article_detail':article_detail, 'comments':comments, 'sets':sets, 'page_var':page_var})
我的 app / urls.py :
path('articles/<str:slug>', article_details, name='article_url')
我的templete的ajax代码是:
$('#Add_reply').on('click', function (e) {
e.preventDefault();
var coms=$('#main_comments_area').val()
if (coms == 0){
alert('Please enter your comments!')
return;
}
var art_id=$('#main_comments_area').data('article_id');
var usr_name=$('#main_comments_area').data('cmt_usr');
var csrf=$('#main_comments_area').data('csrf');
var urlslg=$('#main_comments_area').data('slug');
$.ajax({
type:'POST',
url:urlslg,
data:{
user:usr_name,
cmt_art_id:art_id,
cmt_body:coms,
csrfmiddlewaretoken:csrf
},
beforSend:function () {
alert("Sending ...")
},
success:function () {
alert('Success!')
},
error:function (data) {
alert('Error:'+data.msg)
}
})
})
答案 0 :(得分:1)
您应该已经显示了完整的追溯,这样可以更轻松地查看错误的来源。我想它在这里:
article = request.POST.get(id=cmt_art_id)
您可能是说:
article = Article.objects.get(id=cmt_art_id)
答案 1 :(得分:1)
您的错误发生在if
的以下块内:
if request.method == 'POST':
...
...
article = request.POST.get(id=cmt_art_id)
...
因为request.POST
是一个类似于对象的字典,所以当您使用request.POST.get
时,不能将id
用作关键字参数(id=...
)。
所以,问题是:您想在那条线上完成什么?我想您想从数据库中检索该文章,您应该在其中进行操作:
article = Article.objects.get(id=cmt_art_id)