tun*_*nak 48 python django json
我有以下ListView
import json
class CountryListView(ListView):
model = Country
def render_to_response(self, context, **response_kwargs):
return json.dumps(self.get_queryset().values_list('code', flat=True))
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:
[u'ae', u'ag', u'ai', u'al', u'am',
u'ao', u'ar', u'at', u'au', u'aw',
u'az', u'ba', u'bb', u'bd', u'be', u'bg',
u'bh', u'bl', u'bm', u'bn', '...(remaining elements truncated)...']
is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
Aya*_*Aya 68
我会添加一个稍微详细的答案.
值得注意的是,该QuerySet.values_list()方法实际上并不返回列表,而是返回类型的对象django.db.models.query.ValuesListQuerySet,以便维护Django的延迟评估目标,即生成"列表"所需的数据库查询实际上不会执行,直到该对象为评估.
但是,有些恼人的是,这个对象有一个自定义__repr__方法,当打印出来时它看起来像一个列表,所以这个对象实际上不是一个列表并不总是很明显.
问题中的例外是由于自定义对象无法在JSON中序列化,因此您必须先将其转换为列表,然后使用...
my_list = list(self.get_queryset().values_list('code', flat=True))
Run Code Online (Sandbox Code Playgroud)
...然后你可以将它转换为JSON ...
json_data = json.dumps(my_list)
Run Code Online (Sandbox Code Playgroud)
您还可以放置在生成的JSON数据HttpResponse对象,其中,显然,应该有一个Content-Type的application/json,用...
response = HttpResponse(json_data, content_type='application/json')
Run Code Online (Sandbox Code Playgroud)
...然后你可以从你的功能返回.
| 归档时间: |
|
| 查看次数: |
107446 次 |
| 最近记录: |