Django Ajax表单提交得到500内部服务器错误:/ articles / test_1处的TypeError get()得到了意外的关键字参数'id'

时间:2019-04-19 20:01:20

标签: jquery html ajax django

目前,我正在尝试通过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)
        }
    })

})

2 个答案:

答案 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)