Функция удаления Django выдает ошибку (идентификатор поля ожидал получить число, но получил)

#jquery #django #django-views

#jquery #django #django-просмотры

Вопрос:

Я создал функцию удаления в Django, когда я пытаюсь удалить сообщение с помощью jQuery, я получаю эту ошибку Field ‘id’ ожидаемое число, но получил n n n Я также добавляю попытку назначить идентификатор через pk, но я получаю ту же ошибку, может кто-нибудь сказать мне, как я могу использовать эту функцию с помощью jQuery

 def ArticleDelete(request):
    if request.method == "POST":
        pk = request.POST.get('pk')
        article = get_object_or_404(Article, pk=pk)
        messages.success(request, 'The story was deleted successfully!')
        article.delete()
        return JsonResponse({"success": True}, status=200)
    else:
        return JsonResponse({"success": False}, status=400)

 

urls.py

 urlpatterns = [
    path('delete/', views.ArticleDelete, name='delete'),
}
 

index.js

 $('.delete').click(function () {
        var this_html = $(this);
        var pk = this_html.parent().parent().children().first().text();

        $.ajax({
            url: '{% url "del" %}',
            type: 'POST',
            headers: { "X-CSRFToken": '{{csrf_token}}' },
            data: { pk: pk },
            success: function () {
                this_html.parent().parent().remove();
            }
        });
    })
 

Комментарии:

1. проблема, похоже, из var pk , покажите свой файл шаблона. кроме того, console.log(pk) это может помочь вам в отладке.

Ответ №1:

Добавьте что-нибудь, чтобы распечатать значение pk из вашего запроса.POST (чтобы убедиться, что это то, что вы думаете)

 pk = request.POST.get('pk')
print('pk from POST = ', pk)
 

Вы также можете попробовать принудительно присвоить pk известному значению в вашей функции ArticleDelete, чтобы определить, связана ли проблема с сомнительными данными в запросе.ОПУБЛИКОВАТЬ или что-то еще в функции ArticleDelete

О, подождите — похоже, у вас несоответствие типов, теперь, когда я снова смотрю. Попробуйте преобразовать ваш pk из POST в int, так что…

 if request.method == "POST":
    pk = int(request.POST.get('pk'))  # Make it an int before passing to query
    article = get_object_or_404(Article, pk=pk)
    ...
 

Прямо сейчас оно возвращается в виде строки, которая, похоже, не нравится базе данных — похоже, вместо этого требуется целочисленное значение