django-rest-framework: аргумент int () должен быть строкой, байтовоподобным объектом или числом, а не отложенным атрибутом - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю пример API отдыха с использованием django-rest-framework, я ссылался на учебник на этом сайте https://www.django -rest-framework.org / tutorial / 1-serialization / Я API работает нормальнокогда список и создать новый объект, но он выдает исключение при подробном просмотре (http://127.0.0.1:8000/cars/1) объекта.

Я добавил свой фрагмент кода ниже, пожалуйста, дайте мне знать, что я делаю

Models.py

class Car(models.Model):

    created = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=100, blank=True, default='')
    price = models.TextField()

    class Meta:
        ordering = ('created',)

serializers.py

class CarsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Car
        id = serializers.IntegerField(read_only=True)
        fields = ('id', 'created', 'name', 'price')

Views.py

@csrf_exempt
def car_list(request):
"""
List all code cars, or create a new car.
"""
    if request.method == 'GET':
        cars = Car.objects.all()
        serializer = CarsSerializer(cars, many=True)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = CarsSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)


@csrf_exempt
def car_detail(request, pk):
"""
Retrieve, update or delete a code cars.
"""
    try:
        car = Car.objects.get(pk=pk)
    except Car.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = CarsSerializer(Car)
        return JsonResponse(serializer.data)

    elif request.method == 'PUT':
        data = JSONParser().parse(request)
        serializer = CarsSerializer(Car, data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)

    elif request.method == 'DELETE':
        Car.delete()
        return HttpResponse(status=204)

Urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    path('cars/', views.car_list),
    path('cars/<int:pk>/', views.car_detail),

]

1 Ответ

0 голосов
/ 10 декабря 2018

Прежде всего вам необходимо опубликовать исключение.

Но проблема в том, что вы передаете class, а не экземпляр class в ваш сериализатор.

try:
    car = Car.objects.get(pk=pk)
except Car.DoesNotExist:
    return HttpResponse(status=404)

if request.method == 'GET':
    serializer = CarsSerializer(car)  #  <-- car not Car (this type of error should be fixed everywhere)
    return JsonResponse(serializer.data)

И вCar.delete() должно быть car.delete()

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