Python Django | Field和#x27;id';应为一个数字,但已订购Dict()
我在restframework中有一个运行良好的创建端点。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
视图如下所示
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、 eserializer=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