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

我不是一个专业的Django用户,我会尽可能简洁地描述这个问题

我有一个Django序列化程序定义:

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
定义。注意,所示代码中未定义所提及的
优先清算