Django Rest Framework使用自定义字段将查询集序列化为字典

时间:2015-02-13 11:53:26

标签: json django django-rest-framework

我正试图获得这种JSON:

"Physical": {
            "Strength": 1,
            "Dexterity": 1,
            "Stamina": 1
        },

但是使用我的自定义序列化程序:

class EnumField(serializers.Field):

    """
    Enum objects are serialized into " 'label' : value " notation
    """

    def to_representation(self, obj):
        return {"{0}".format(obj.all()[0].__str__()): obj.all()[0].current_value}



class EnumListField(serializers.DictField):
    child = EnumField()

这就是我的模特:

@property
def physical_attributes(self):
    return [self.attributes.filter(attribute=attribute) for attribute
            in AttributeAbility.objects.physical()]

输出:

 "mental_attributes": [
            {
                "Intelligence": 1
            }, 
            {
                "Wits": 0
            }, 
            {
                "Resolve": 0
            }
        ], 

我需要对自己的领域做些什么,看起来像我的第一个JSON?我不认为DictField已经存在,这就是SO提出的一些问题。

1 个答案:

答案 0 :(得分:0)

您的属性返回一个列表,并且您需要key:value对,因此将它们视为字典:

def to_representation(self, obj):
    return {str(item.get()): item.get().value for item in obj}

显然,将.value替换为您想要的任何值,如果str()表示不是您想要的密钥,请替换它。