我正在使用django-rest-framework创建示例rest API, 我在那里的网站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),
]
答案 0 :(得分:0)
首先,您需要发布异常。
但是问题是您将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()