Django无法在序列化程序上设置整型字段
我不是一个专业的Django用户,我会尽可能简洁地描述这个问题 我有一个Django序列化程序定义:Django无法在序列化程序上设置整型字段,django,django-rest-framework,serialization,Django,Django Rest Framework,Serialization,我不是一个专业的Django用户,我会尽可能简洁地描述这个问题 我有一个Django序列化程序定义: class PrioritisedMarketActionSerializer(serializers.Serializer): marketaction = MarketActionSerializer(required=True) priority = serializers.IntegerField() MarketActionSerializer的定义是 class Mar
class PrioritisedMarketActionSerializer(serializers.Serializer):
marketaction = MarketActionSerializer(required=True)
priority = serializers.IntegerField()
MarketActionSerializer的定义是
class MarketActionClearingSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=True)
class Meta:
model = MarketAction
fields = (
'id', 'date', 'actionStartTime', 'actionEndTime', 'value', 'uom', 'price', 'deliveryPoint',
'marketSessionid',
'marketActorid', 'formid', 'actionTypeid', 'statusid', 'loadid', 'cpu', 'ram', 'disk',)
depth = 0
error_status_codes = {
HTTP_400_BAD_REQUEST: 'Bad Request',
HTTP_201_CREATED: 'Created',
HTTP_204_NO_CONTENT: 'No content',
HTTP_301_MOVED_PERMANENTLY: 'Moved permanently',
HTTP_401_UNAUTHORIZED: 'Unauthorized',
HTTP_403_FORBIDDEN: 'Forbidden',
HTTP_404_NOT_FOUND: 'Not found',
HTTP_500_INTERNAL_SERVER_ERROR: 'Internal server error'
}
我的目标是在通过POST方法收到MarketAction对象列表后,创建这些序列化程序对象的列表。我声明存储这些对象的空列表:
output = []
然后,在接收到的对象上迭代:
prioritised_ma["marketaction"] = MarketActionSerializer(ma).data
prioritised_ma["priority"] = 1
output.append(PrioritisedMarketActionsSerializer(prioritised_ma).data)
出于测试目的,[“优先级”]字段被设置为1,{int}。然而,当我打电话时:
PrioritisedMarketActionsSerializer(prioritised_ma).data
我有一个奇怪的错误:
'int' object has no attribute 'pk'
完整的关联堆栈跟踪是:
Traceback (most recent call last):
File "/home/vlad/Documents/Research Projects/Catalyst Marketplace/GitProjects/orchestrator/information_broker/ib/views/api.py", line 709, in post
output.append(PrioritisedMarketSerializer(prioritised_ma_clearing).data)
File "/home/vlad/.local/lib/python3.6/site-packages/rest_framework/serializers.py", line 563, in data
ret = super(Serializer, self).data
File "/home/vlad/.local/lib/python3.6/site-packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/home/vlad/.local/lib/python3.6/site-packages/rest_framework/serializers.py", line 530, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "/home/vlad/.local/lib/python3.6/site-packages/rest_framework/serializers.py", line 530, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "/home/vlad/.local/lib/python3.6/site-packages/rest_framework/relations.py", line 272, in to_representation
return value.pk
AttributeError: 'int' object has no attribute 'pk'
我假设错误与“priority”字段有关,该字段是{int}值,但我无法理解它
有人能帮帮我吗,或者给我一个提示,我在这里做错了什么?我将不胜感激
非常感谢,祝你度过美好的一天 我已经解决了这个问题 感谢@Ivan Starostin为我指明了正确的方向 作为:
class PrioritisedMarketActionSerializer(serializers.Serializer):
marketaction = MarketActionSerializer(required=True)
priority = serializers.IntegerField()
对于marketaction
属性,需要一个MarketActionSerializer
对象,我错误地将它赋予了MarketActionSerializer.data
为了解决这个问题,我使用MarketActionSerializer(ma).is_valid()
检查了marketaction的正确格式,但是我在prioritizedMarketactionSerializer
的实例中使用了dict对象ma
解决方案如下所示:
if MarketActionSerializer(data=ma).is_valid():
prioritised_ma["marketaction"] = ma
prioritised_ma["priority"] = 1
prioritised_marke_action = PrioritisedMarketActionSeializer(prioritised_ma).data
感谢大家指导我解决这个问题,更好地理解Djano。特别感谢@Ivan Starostin 请显示完整的错误回溯。我已经更新了问题以包含完整的堆栈跟踪。非常感谢。rob,我的不是一个模型。Serializer,我正在尝试从标准的dictTry设置
优先级设置\u ma[“marketaction”]=ma
而不是序列化结果构建一个序列化程序。另外,请显示MarketActionSerializer
定义。注意,所示代码中未定义所提及的优先清算
。