Joh*_*len 7 django json mongodb pymongo mongoengine
所以我正在尝试为项目返回一个JSON对象.我花了几个小时试图让Django返回JSON.
以下是我们一直在合作的观点:
def json(request, first_name):
user = User.objects.all()
#user = User.objects.all().values()
result = simplejson.dumps(user, default=json_util.default)
return HttpResponse(result)
Run Code Online (Sandbox Code Playgroud)
这是我的模特:
class User(Document):
gender = StringField( choices=['male', 'female', 'Unknown'])
age = IntField()
email = EmailField()
display_name = StringField(max_length=50)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
location = StringField(max_length=50)
status = StringField(max_length=50)
hideStatus = BooleanField()
photos = ListField(EmbeddedDocumentField('Photo'))
profile =ListField(EmbeddedDocumentField('ProfileItem'))
allProfile = ListField(EmbeddedDocumentField('ProfileItem')) #only return for your own profile
Run Code Online (Sandbox Code Playgroud)
这就是它的回归:
[<User: User object>, <User: User object>] is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
关于如何才能返回JSON的任何想法?
Tei*_*man 11
对于MongoEngine 0.8或更高版本,对象和查询集都有一个to_json()
方法.
>>> User.objects.to_json()
Run Code Online (Sandbox Code Playgroud)
simplejson.dumps()
不知道如何"进入"自定义对象; 的default
功能,json_util.default
必须只是打电话str()
或repr()
在文件上.(json_util
您自己编写的自定义代码吗?如果是这样,在此处显示其来源可能证明我的主张.)
最终,您的default
功能需要能够理解MongoEngine文档.我可以想到至少有两种方法可以实现:
default
通过内省其_fields
属性编写适用于所有MongoEngine文档的自定义函数(但请注意,前导下划线表示这是MongoEngine的私有API /实现细节的一部分,可能会在将来的版本中更改)
让每个文档都实现一个as_dict
返回对象字典表示的方法.这与to_mongo
MongoEngine在文档中提供的方法类似,但不应返回_types
或_cls
字段(同样,这些是MongoEngine的实现细节).
我建议你使用选项#2:代码将更清晰,更易于阅读,更好的封装,并且不需要使用任何私有API.
归档时间: |
|
查看次数: |
4420 次 |
最近记录: |