2017-07-08 129 views
0

对象的列表有其上印刷像这样的对象的列表:解析在Django

[<Intermediate_table: Intermediate_table object>, <Intermediate_table: Intermediate_table object>, <Intermediate_table: Intermediate_table object>, <Intermediate_table: Intermediate_table object>] 

我想提取针对我用json.loads单个对象的电子邮件属性(查询集),它显示了一个错误:期待值:第1行第1列(CHAR 0)

#I also tried without json.loads: 
for i in queryset:#the list is in queryset variable 
print(i.subject)#this gives an error 

函数(它在admins.py文件时,它被调用用于在管理的特定动作该模型的页面):

def authenticate_(modeladmin, request, queryset): 
    #q = queryset.email; 
    #req = json.loads(str(queryset)  
    #q = req['email'] 
    for i in queryset: 
     print(json.loads(str(i))) 
    print('asdasdadasd-->'+str(queryset)) 

错误跟踪:

Traceback: 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    112.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/contrib/admin/options.py" in wrapper 
    465.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapped_view 
    99.      response = view_func(request, *args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    52.   response = view_func(request, *args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/contrib/admin/sites.py" in inner 
    198.    return view(request, *args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapped_view 
    99.      response = view_func(request, *args, **kwargs) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/utils/decorators.py" in bound_func 
    25.     return func(self, *args2, **kwargs2) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/contrib/admin/options.py" in changelist_view 
    1364.     response = self.response_action(request, queryset=cl.get_queryset(request)) 
File "/home/saurabh/Music/Project_ques10/test/lib/python3.4/site-packages/django/contrib/admin/options.py" in response_action 
    1117.    response = func(self, request, queryset) 
File "/home/saurabh/Music/Project_ques10/ques10-funda/biostar/apps/quespaper/admin.py" in authenticate_ 
    83.   print(json.loads(str(i))) 
File "/usr/lib/python3.4/json/__init__.py" in loads 
    318.   return _default_decoder.decode(s) 
File "/usr/lib/python3.4/json/decoder.py" in decode 
    343.   obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "/usr/lib/python3.4/json/decoder.py" in raw_decode 
    361.    raise ValueError(errmsg("Expecting value", s, err.value)) from None 

Exception Type: ValueError at /admin/quespaper/intermediate_table/ 
Exception Value: Expecting value: line 1 column 1 (char 0) 

请建议解析每个对象的正确途径。

谢谢。

+0

请发布错误。当错误信息可用时,它将很容易调试 –

+0

https://gist.github.com/Sharma96/7f1a1a5683a97322eb440caea5a6fdab – ssharma

+0

'加载(queryset)'看起来不对。 queryset是你的问题中打印的list/queryset吗?你为什么认为这会调用json而不是['values_list()'](https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values-list)? 'Intermediate_table'是怎么样的? – dhke

回答

0

问题是,您尝试解码的对象不是json可编码的第一个地方。 JSON可接受的类型是字符串,数字,布尔值,数组和字典。所以,如果你将这个对象转换为字符串并尝试对其进行解码,那么python将无法将其解码为正确的对象,因此会引发错误。

如果你真的想使用JSON格式,你只能先编码像这样以后使用它的字符串表示:

for i in queryset: 
    print(json.loads(json.dumps(str(i)))) 

您可能还需要define__str __()方法为你的模型。

没有json.loads()的代码失败,因为您的Intermediate_table对象没有属性电子邮件。

+0

你的方法给出的错误:__ str__返回非字符串(类型Intermediate_table) – ssharma

+0

啊!我认为问题出在__str__表示。你能简单地打印(str(i))并看看它打印什么?如果它给出一个错误或打印对象,那么你将不得不在你的类中定义__str __()方法 –

+0

是的,__str __()是问题,虽然在你的评论之前计算出它.thanks.you可以更新你的答案。 – ssharma