我有一个使用DictField
的Django Rest Framework序列化程序:
class FlatArticleSerializer(Serializer):
attributes = DictField(child=FlatArticleAttributeSerializer())
输出始终不同,因为属性是字典,根据定义,它不是排序的。有没有办法在输出中对这些进行排序,例如按字母顺序排序?
答案 0 :(得分:1)
如果内部值存储在OrderedDict
中,则键将按OrderedDict
的顺序排列。您可以像to_representation
一样对此进行后期处理:
def to_representation(self, instance):
representation = super().to_representation(instance)
attributes_dict = representation['attributes']
attribute_keys_sorted = sorted(attributes_dict.keys())
# Build ordered dictionary with sorted keys
sorted_attribute_dict = OrderedDict()
for key in attribute_keys_sorted:
sorted_attribute_dict[key] = attributes_dict[key]
representation['attributes'] = sorted_attribute_dict
return representation
答案 1 :(得分:0)
使用
class Meta:
order_by = (('attributes',))
这将根据属性字段
对数据进行排序答案 2 :(得分:-1)
为什么不使用嵌套的序列化程序呢?我相信它会按照序列化程序的fields
指示对键进行排序:
class FlatArticleSerializer(Serializer):
attributes = FlatArticleAttributeSerializer()