Ajax-вызов шаблона Django для api - недопустимый литерал для int () с основанием 10: '[Object Object]' - PullRequest
0 голосов
/ 24 сентября 2019

Привет, я пытаюсь позвонить на мой django api с помощью вызова ajax от моего django template

API получает запрос POST со значением идентификатора в URL

Мое представление API:

@api_view(['POST'])
def add_favorite(request, property_id):
    if request.method == 'POST':
        try:
            favorite_property = Property.objects.get(pk=property_id)
            if request.user.is_authenticated:
                login_user = request.user
                if not login_user.properties.filter(pk=property_id).exists():
                    login_user.properties.add(favorite_property)

                    return JsonResponse({'code':'200','data': favorite_property.id}, status=200)
                else:
                    return JsonResponse({'code':'404','errors': "Property already exists in favorite"}, status=404)

        except Property.DoesNotExist:
            return JsonResponse({'code':'404','errors': "Property not found"}, status=404)

Мой HTML-код со ссылкой на вызов ajax:

<a id="mylink" href="javascript:onclickFunction('{{ property.id }}')">
     <i class="far fa-heart fa-lg" style="color: red" title="Add to favorite"></i>
</a>

И вот как я вызываю API в моем представлении django, чтобы попытаться получить ответ:

<script>
    $(document).ready(function () {
            $('#mylink').on('click', function (property_id) {
                property_id.preventDefault();
                $.ajax({
                    type: "POST",
                    url: "http://localhost:9999/api/add_favorite/" + property_id.toString() + "/",
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader('Authorization', 'Bearer {{ refresh_token }}');
                    },
                    success: function (data) {
                        var obj = jQuery.parseJSON(data);
                        alert(obj);
                    }
                });
                return false;
            });
        });
</script>

Когда я пытаюсь нажать на ссылку, она возвращает следующую ошибку:

ValueError: недопустимый литерал для int () с основанием 10: '[object Object]'web_1 |[24 / Sep / 2019 03:13:14] "POST / api / add_favorite / [object% 20Object] / HTTP / 1.1" 500 17473

Я пытался превратить property_id в строкукак будто это все еще не работает, я не знаю, что еще я пропускаю.

1 Ответ

0 голосов
/ 24 сентября 2019

Я изменил свой сценарий на:

$('#mylink').on('click', function (event) {
                event.preventDefault();
                property_id = $(this).attr("value")
                $.ajax({
                    type: "POST",
                    url: "http://localhost:9999/api/add_favorite/" + property_id + "/",
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader('Authorization', 'Bearer {{ refresh_token }}');
                    },
                    success: function (data) {
                        if (data.code == 200) {
                            alert('ok');
                        }
                    }
                });
                return false;
            });

и мой HTML-код:

<a id="mylink" href="javascript:onclickFunction()" value="{{ property.id }}">
      <i class="far fa-heart fa-lg" style="color: red" title="Add to favorite"></i>
</a>

, и теперь он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...