【发布时间】:2013-12-26 04:36:45
【问题描述】:
我正在使用以下库:Django 1.6.1、python 3.3.2 和 django-restless 0.0.7。我有一个视图,它使用 django-restless 提供的序列化方法将用户序列化为 json 对象,在此处找到http://django-restless.readthedocs.org/en/latest/#restless.models.serialize。实现后的样子
fields = [
'pk',
'username',
'job_title',
'company',
'interests',
'email',
'website',
'image',
('posts', lambda user: user.get_posts())
]
serialized_user = serialize(request.user, fields=fields)
print(type(serialized_user), serialized_user)
然后给出类似的东西
<class 'dict'> {'posts': [], 'interests': None,
'image': 'https://secure.gravatar.com/avatar/', 'company': None,
'email': None, 'job_title': None, 'username': 'user-94376642', 'pk': 3,
'website': None}
奇怪的是当我在 serialized_user 上调用 json.dumps 时;也就是说,
json.dumps(serailzed_user)
我得到了错误
[] is not JSON serializable
现在,如果我将输出复制到单独的字典中,它会正常序列化并且不会返回错误。这是为什么呢?
更新
我按照说明更改了代码,它给了我一个 AttributeError
AttributeError
'str' object has no attribute '_meta'
在 django/core/serializers/base.py 文件中
concrete_model = obj._meta.concrete_model
我还从堆栈跟踪中传递了以下信息,
obj 'interests'
self <django.core.serializers.json.Serializer object at 0x7f37037ca690>
queryset
{'company': None,
'email': None,
'image': 'https://secure.gravatar.com/avatar/',
'interests': None,
'job_title': None,
'pk': 3,
'posts': [],
'username': 'user-94376642',
'website': None}
options{}
【问题讨论】:
-
从 django.forms.models 中尝试 model_to_dict 自定义 django 方法 import model_to_dict model_to_dict(instance, fields=[], exclude=[])
-
这是否支持 lambdas 的用户,或从模型调用函数?
-
我不知道试试看,但是你为什么要这么做?
-
我需要调用一个函数,该函数返回以特殊方式序列化的其他模型,这些模型引用了用户
标签: python django json serialization