Django 按键对DictField的DRF序列化程序输出进行排序
我有一个Django Rest Framework序列化程序,它使用DictField:Django 按键对DictField的DRF序列化程序输出进行排序,django,sorting,dictionary,django-rest-framework,serialization,Django,Sorting,Dictionary,Django Rest Framework,Serialization,我有一个Django Rest Framework序列化程序,它使用DictField: 输出总是不同的,因为属性是一个字典,根据定义没有排序。有没有一种方法可以在输出中对它们进行排序,例如按字符串的字母顺序排序?为什么不使用嵌套序列化程序呢?我相信它会根据序列化程序的字段对键进行排序: class FlatArticleSerializer(Serializer): attributes = FlatArticleAttributeSerializer() 使用 这将根据属性字段对数
输出总是不同的,因为属性是一个字典,根据定义没有排序。有没有一种方法可以在输出中对它们进行排序,例如按字符串的字母顺序排序?为什么不使用嵌套序列化程序呢?我相信它会根据序列化程序的字段对键进行排序:
class FlatArticleSerializer(Serializer):
attributes = FlatArticleAttributeSerializer()
使用
这将根据属性字段对数据进行排序如果内部值存储在OrderedICT中,则键将按OrderedICT的顺序排列。您可以按如下方式将其发布到\u表示中:
你试过一个方法域吗?该方法将接收数据并返回一个排序的dict,但我不再免费获得反序列化。现在,如果我输入一个字典,对象就被创建了。然后您可以使用Jahongir响应中建议的嵌套序列化程序,并在nestedd序列化程序中设置order_by属性来对数据进行排序。在您的情况下它会工作吗?因为键没有在FlatArticleAttributes中设置,所以序列化程序不知道键。我应该把它放在哪里?序列化程序在Meta中没有order_by关键字。
class FlatArticleSerializer(Serializer):
attributes = FlatArticleAttributeSerializer()
class Meta:
order_by = (('attributes',))
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