python - 姜戈 | 字段 'id' 需要一个数字,但得到 OrderedDict()
问题描述
我在 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() 添加到 Serializer 时,它会给出错误:
字段 'id' 需要一个数字,但得到 OrderedDict([('title', 'erwre'), ('rate_per_kg', 53.0), ('discount', 5.0)])。
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):
传递给参数的obj
参数不是实际Item object
的,它是传递给视图中的序列化程序的字典。即serializer = self.get_serializer(data=request.data)
。如果您进行更新,这会很好用,然后您可以通过Item object
ieserializer = self.get_serializer(item, data=request.data)
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
obj
传递给方法的参数get_<field>
应该是模型对象,否则调用serializer.is_valid(raise_exception=True)
将失败导致该错误。
推荐阅读
- filezilla - 通过 FileZilla 将本地文件夹上传到 Storj 存储桶后,如何自动刷新远程列表?
- c# - 如何使用文件路径从 csproj 文件访问保存在 Azure dev ops 存储库中的文件?
- powerbi - 如何修复 Power BI M 查询中的错误“404”
- warnings - 警告:hazelcast 模式位置的名称不正确,使用默认值
- python - 如何为数据框的特定子集绘制图表
- ros - Frame.msg 不能与来自 cantools 的 db_decode 一起使用
- javascript - 全日历模式未显示
- reactjs - 在 Servlet 环境中部署 React 应用程序
- selenium - 在使用 Selenium 的嵌入式 hellosign 区域的警报窗口中单击“确定”按钮
- docker - Wso2 API Manager 作为 docker compose 奇怪地处理 IP