Отправка формы Django Ajax get 500 Internal Server Error: TypeError в / article / test_1 get () получил неожиданный аргумент ключевого слова 'id' - PullRequest
0 голосов
/ 19 апреля 2019

В настоящее время я пытаюсь реализовать функцию «Добавить комментарии» для моего сайта через 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)

My 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})

My app / urls.py :

path('articles/<str:slug>', article_details, name='article_url')

Код 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 ]

1 голос
/ 20 апреля 2019

Ваша ошибка происходит внутри этого блока 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)
1 голос
/ 20 апреля 2019

Вы должны были показать полную трассировку, которая упростила бы, откуда появилась ошибка.Я предполагаю, что это здесь:

article = request.POST.get(id=cmt_art_id)

Вы, вероятно, имели в виду:

article = Article.objects.get(id=cmt_art_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...