通过django-rest-framework

时间:2015-06-26 12:33:17

标签: django django-rest-framework

我尝试使用DRF的更新版本。我使用了教程中的代码

serializer = SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data

我应该

[{
  'pk': 1, 'title': u'', 'code': u'foo = "bar"\n', 'linenos': False, 
  'language': u'python', 'style': u'friendly'
 }, {
  'pk': 2, 'title': u'', 'code': u'print "hello, world"\n', 'linenos': False, 
  'language': u'python', 'style': u'friendly'
}]

但我得到了:

[OrderedDict([
  ('pk', 1), ('title', u''), ('code', u'foo = "bar"\n'), 
  ('linenos', False), ('language', 'python'), ('style', 'friendly')
 ]), 
 OrderedDict([
  ('pk', 2), ('title', u''), ('code', u'print "hello, world"\n'), ('linenos', False), 
  ('language', 'python'), ('style', 'friendly')
 ])
]

请解释如何获得正确的结果?

2 个答案:

答案 0 :(得分:2)

如果你需要有效的json,你可以

import json
serializer = SnippetSerializer(Snippet.objects.all(), many=True)
json.dumps(serializer.data)

答案 1 :(得分:0)

结果是正确的。 DRF在序列化过程中明确使用OrderedDict。

<强> OrderedDict:

OrderedDict是dict的子类。您可以在OrderedDict上执行普通python字典的所有操作。

根据docs

  

有序词典就像常规词典一样,但它们   记住插入项目的顺序。迭代时   有序字典,项目按顺序返回其键   首先加入。

此外,如果您需要常规的python字典,可以使用dict()上的serializer.data作为Kevin建议。

dict(serializer.data)  # Converts to regular python dict