当前位置: 首页 > 知识库问答 >
问题:

django-rest-framework:int()参数必须是字符串、类似字节的对象或数字,而不是延迟属性

申屠宗清
2023-03-14
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',)
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个答案

令狐和裕
2023-03-14

首先,您需要发布异常。

但问题是,您将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()

 类似资料:
  • 我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。

  • 我想对一个浮点数进行四舍五入,得到点后的两位数。但我收到了一个错误: float()参数必须是字符串或数字,而不是“NoneType” 在评级模型的评级字段中四舍五入是一个坏主意,因为平均_评级不会四舍五入

  • 我使用的是Python3.3,但在尝试pickle一个简单的字典时出现了一个隐秘的错误。 代码如下: 我得到:

  • 我试图从列列表中获取最大值,以及具有最大值的列的名称,如这些帖子中所述PySpark:计算列子集的行最大值并添加到现有的数据帧 中如何获取pyspark数据帧中具有最大值的列的名称我已经查看了许多帖子并尝试了许多选项,但尚未成功。 列对象不可调用TypeError:“列”对象不可调用,请使用SusCol列并传递多列Pyspark:在UDF中传递多列 加载到数据帧Rule_Total_Score的表

  • 运行此代码时 我得到这个错误 read_bikeins=pdf。PdfFileReader(bikeins)回溯(最近一次呼叫最后一次): 文件“”,第1行,以read\u bikeins=pdf格式。PdfFileReader(比基恩) 文件“C:\Users\Naveen Raj\Anaconda3\lib\site packages\PyPDF2\pdf.py”,第1084行,在init s

  • 问题内容: 我已经将脚本从Python 2.7转换为3.2,并且有一个错误。 在最后一行,我得到了这个错误: 我已经安装了Python 3.2,并且已经安装了lxml-2.3.win32-py3.2.exe。 在Python 2.7上可以使用。 问题答案: 输出文件应处于二进制模式。