2
에 사전도 같은 개체의 목록을 직렬화, 내가 가진 다음과 같은 모델 (이 단순화되어 있지만, 모든이의) :장고에게 & 장고 - 나머지 프레임 워크를 사용 DjangoRestFramework
class Device(Model):
#stuff
class DeviceInformation(Model):
device = ForeignKey(Device, reverse='infos')
key = CharField(max_length=32)
value = CharField(max_length=1024)
django-를 통해 장치를 직렬화 rest-framework의 ModelSerializer를 사용하면 다음과 같은 결과를 얻을 수 있습니다.
{
//stuff
infos: [{
'key':'BatteryLevel',
'value':'80%'
},{
'key':'DeviceName',
'value':'my device'
}, //etc
]
}
어느 것이 정상입니까? 그러나 다음과 같이 serialize하는 것이 더 합리적입니다.
{
//stuff
infos: {
'BatteryLevel':'80%',
'DeviceName':'my device',
//etc
}
}
어떻게하면됩니까? 심지어 가능할까요? 이러한 정보를 deserialize 할 필요는 없습니다.
편집 : 당신의 읽기 전용의 경우를 들어
class DeviceInfoSerializer(ModelSerializer):
class Meta:
model = DeviceInformation
fields = ('key', 'value')
read_only_fields = fields
class DeviceSerializer(HyperlinkedModelSerializer):
udid = serializers.CharField(read_only=True)
def __init__(self, *args, **kwargs):
super(DeviceSerializer, self).__init__(*args, **kwargs)
if hasattr(self, 'object') and self.object and not self.many:
self.data['infos'] = DeviceInfoSerializer(
self.object.infos.all(), many=True).data
class Meta:
model = Device
fields = ['udid', 'model', 'tracked']
read_only_fields = ('model', 'tracked')
slug_field = 'udid'
전문가가 아닌 경우 get_field (..) 또는 get_key_field() 및 get_value_field()를 재정의하면 어떻게됩니까? http://django-rest-framework.org/api-guide/serializers.html#customising-the-default-fields – EsseTi
소스를 검사 한 후에는 작동하지 않습니다. 그러나, 커스텀'Field'를 프린트하고 to_native (...)를 겹쳐 쓰면 이것을 달성 할 수 있어야합니다. 그러나 나는 이것을 매우 해킹하는 것처럼 느낀다. – Habfast
당신의 serializers는 어떻게 생겼습니까? – Jeff