Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django | Field和#x27;id';应为一个数字,但已订购Dict()_Python_Django_Python 3.x_Django Rest Framework - Fatal编程技术网

Python Django | Field和#x27;id';应为一个数字,但已订购Dict()

Python Django | Field和#x27;id';应为一个数字,但已订购Dict(),python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我在restframework中有一个运行良好的创建端点。 视图如下所示 class ItemAddAPIView(CreateAPIView): serializer_class = ItemSerializer parser_classes = [MultiPartParser] def create(self, request, *args, **kwargs): try: serializer = self.get_ser

我在restframework中有一个运行良好的创建端点。
视图如下所示

class ItemAddAPIView(CreateAPIView):
    serializer_class = ItemSerializer
    parser_classes = [MultiPartParser]

    def create(self, request, *args, **kwargs):
        try:
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            item_obj = Item.objects.create(title=serializer.data['title'],
                            discount=serializer.data['discount'],
                            rate_per_kg=serializer.data['rate_per_kg'])
            return Response(serializer.data, status=HTTP_201_CREATED)
        except Exception as e:
            print("error :: ",e)
序列化程序如下所示:

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields='__all__'
这个很好用。但是当我向序列化程序添加SerializerMethodField()时,它会给出错误:

字段“id”需要一个数字,但得到OrderedDict([('title','erwre'), (“单价每千克”,53.0),(“折扣”,5.0)]

传递给
obj
参数的参数不是实际的
项对象
,而是传递给视图中序列化程序的字典。i、 e
serializer=self.get\u serializer(data=request.data)
。 如果您正在进行更新,则可以传递
Item对象
,即
serializer=self.get\u serializer(Item,data=request.data)

传递给
get
方法的
obj
参数应该是一个模型对象,否则对
serializer.is\u的调用有效(raise\u exception=True)
将失败,导致该错误

class ItemSerializer(serializers.ModelSerializer):
    images = serializers.SerializerMethodField(method_name='get_image_list')
    class Meta:
        model = Item
        fields='__all__'

    def get_image_list(self,obj):
        image_list=[]
        item_images = ItemImage.objects.filter(item=obj)
        request = self.context.get('request')
        for each in item_images:
            image_list.append(request.build_absolute_uri(each.image.url))
        return image_list
class ItemSerializer(serializers.ModelSerializer):
    images = serializers.SerializerMethodField(method_name='get_image_list')
    class Meta:
        model = Item
        fields='__all__'

    def get_image_list(self,obj):
image_list=[]
item_images = ItemImage.objects.filter(item=obj)
request = self.context.get('request')
for each in item_images:
    image_list.append(request.build_absolute_uri(each.image.url))
return image_list