Django 按键对DictField的DRF序列化程序输出进行排序

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() 使用 这将根据属性字段对数

我有一个Django Rest Framework序列化程序,它使用DictField:


输出总是不同的,因为属性是一个字典,根据定义没有排序。有没有一种方法可以在输出中对它们进行排序,例如按字符串的字母顺序排序?

为什么不使用嵌套序列化程序呢?我相信它会根据序列化程序的字段对键进行排序:

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