我有一个名为ServiceSubCategory
的django模型,我想用Python创建一个主键值的JSON列表。
我试过这个:
idDic=[obj.as_json for obj in ServiceSubCategory.objects.values_list('id',flat=True)]
但是我收到了这个错误:
int
对象没有属性as_json
我这样做是因为我稍后会为此添加另一个JSON。
那么我怎样才能从我的模型质量键中创建一个JSON?
更新
我试过
id_json = json.dumps(ServiceSubCategory.objects.values_list('id',flat=True))
我收到了一个新错误:
[1,2,3,4,5,6,7,8,9,10]不是JSON可序列化的
这是追溯:
回溯:文件 “/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg/django/core/handlers/base.py” 在get_response中 111. response = wrapped_callback(request,* callback_args,** callback_kwargs)文件“/var/www/html/salimi/salimi/views.py”正在服务中 61. idDic = json.dumps(ServiceSubCategory.objects.values_list('id',flat = True)) 转储中的文件“/usr/lib/python2.7/json/init.py” 243.在编码中返回_default_encoder.encode(obj)文件“/usr/lib/python2.7/json/encoder.py” 207. chunks = self.iterencode(o,_ one_shot = True)文件“/usr/lib/python2.7/json/encoder.py”在iterencode中 270.返回_iterencode(o,0)默认文件“/usr/lib/python2.7/json/encoder.py” 184.引发TypeError(repr(o)+“不是JSON可序列化的”)
异常类型:/ service / 1 /异常值的TypeError:[1,2,3,4, 5,6,7,8,9,10]不是JSON可序列化的
答案 0 :(得分:3)
这应该可以解决问题:
import json
json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))
values_list
返回django.db.models.query.ValuesListQuerySet
的实例,它没有默认的JSON序列化程序(它只是一个QuerySet,到目前为止还没有数据库请求)。但是,您可以在之前将其转换为列表对象。
import json
values_list_object = ServiceSubCategory.objects.values_list('id', flat=True))
list_object = list(values_list) # querying the database
json.dumps(list_object)
答案 1 :(得分:1)
您可以简单地写下以下内容:
import json
id_json = json.dumps(list(ServiceSubCategory.objects.values_list('id',flat=True)))
答案 2 :(得分:1)
<强>更新强>
看起来ServiceSubCategory.objects.values_list('id', flat=True)
可能会返回一个生成器。在这种情况下,您可以使用list()
:
import json
json.dumps(list(ServiceSubCategory.objects.values_list('id', flat=True)))
不会这样做吗?
import json
json.dumps(ServiceSubCategory.objects.values_list('id', flat=True))
由于ServiceSubCategory.objects.values_list
已经是一个列表,因此可以将其直接转储到JSON。没有必要使用列表理解。