【发布时间】:2012-12-10 12:27:59
【问题描述】:
我想为我的 Ajax 请求放置一个 Django 模型作为响应。目前我的views.py中有这个:
def get_account(request, account_id):
try:
account = Account.objects.get(pk=account_id)
success = True
error_message = None
except Account.DoesNotExist:
success = False
error_message = 'This account does not exist'
results = {
'success': success,
'error_message': error_message,
}
return HttpResponse(
json.dumps(results),
mimetype='application/json')
我想将account 模型添加到results 字典中。 account.__dict__ 不会这样做,因为它会引用其他对象。
我找到了 de django serialize function,它完全按照我想要的方式对其进行序列化,只是它直接生成了一个 Json 字符串,所以我最终会在 Json 对象中得到一个 Json 字符串(如果你有大型模型,这对带宽不利,因为 Json 字符串 get 已经全部转义了)。那么我需要在 Javascript 中再次对其进行 json_decode。
另外,django 序列化函数只接受对象列表,所以我必须创建一个只有一个对象的列表,当我反序列化它时,它会取列表的第一个值(这不是一个大问题,但它加起来就是一堆)。
如果您可以将模型序列化为仅 python 字典,那就太好了。然后你可以随心所欲地用它做任何事情。
有人遇到过同样的问题吗?你是怎么解决的?
【问题讨论】:
-
考虑使用适当的 API 模块,例如 django-tastypie.readthedocs.org
-
内部使用的 API?这不是矫枉过正吗?还是常用的?
-
我没有注意到这是供内部使用的,抱歉。无论如何都要考虑 API ;)
标签: python django json serialization model