Python 如何控制django REST框架返回的JSON的顺序?

Python 如何控制django REST框架返回的JSON的顺序?,python,json,django,django-rest-framework,Python,Json,Django,Django Rest Framework,我想了解在什么级别编写代码来控制django序列化程序返回的顺序。必须在模板级别、模型级别或序列化程序级别执行。什么决定了任何序列化程序返回的JSON中字段的顺序?在我的示例中,考虑以下序列化程序类: class FilterURLSerializer(serializers.Serializer): active = serializers.CharField(read_only=True) inactive = serializers.CharField(read_only=

我想了解在什么级别编写代码来控制django序列化程序返回的顺序。必须在模板级别、模型级别或序列化程序级别执行。什么决定了任何序列化程序返回的JSON中字段的顺序?在我的示例中,考虑以下序列化程序类:

class FilterURLSerializer(serializers.Serializer):
    active = serializers.CharField(read_only=True)
    inactive = serializers.CharField(read_only=True)


class FacetedFilterOptionsSerializer(serializers.Serializer):
    name = serializers.CharField(read_only=True)
    slug = serializers.CharField(read_only=True)
    count = serializers.IntegerField(read_only=True)
    active = serializers.BooleanField(read_only=True)
    urls = FilterURLSerializer(read_only=True)


class FacetedFilterSerializer(serializers.Serializer):
    name = serializers.CharField(read_only=True)
    slug = serializers.CharField(read_only=True)
    options = FacetedFilterOptionsSerializer(source='options')
返回的JSON数据如下:

{'name': u'Skill level', 'slug': u'skill', 'options': [{'name': u"I'm Learning", 'slug': u'beginner', 'count': 0, 'active': False, 'urls': {'active': u'/en-US/search?skill=beginner', 'inactive': u'/en-US/search'}}, {'name': u"I'm an Expert", 'slug': u'advanced', 'count': 0, 'active': False, 'urls': {'active': u'/en-US/search?skill=advanced', 'inactive': u'/en-US/search'}}, {'name': u'Intermediate', 'slug': u'intermediate', 'count': 0, 'active': False, 'urls': {'active': u'/en-US/search?skill=intermediate', 'inactive': u'/en-US/search'}}]}

我想知道是什么决定了JSON中这些字段的顺序,以及如何按我所希望的方式进行更改?

如果您希望字段名按顺序排列,可以尝试以下方法:

myList = list(yourmodel.objects.values('filed1','field2').filter(someid=i).orderby('column'))

JSON对象是无序的,就像Python字典一样。为什么需要在此处订购密钥?是否尝试添加
Meta
字段
列表?字段应按该顺序序列化。但是请注意,@MartijnPieters的评论即使适用。如果我必须在前端呈现JSON,以便在“选项字段”中,我想首先列出“我是专家”字段。我怎样才能用其他方式做到这一点?在这个JSON中,“我在学习”是“选项”@dhke中的第一个字段,这正是我的问题。向模型中添加Meta(如ordering=['name'])是否决定了JSON?这是一个开源代码库。我试图设置的是一个有点复杂的自定义订单。也许我必须将您的解决方案与在序列化程序中设置查询集相结合,如下所示。试试看!:)@正如Martijn所说,JSON对象中的键/值对是无序的。在前端代码中,按您希望的键顺序显示值。