【发布时间】:2014-09-07 11:03:23
【问题描述】:
我有一个 jsonify 模板标签:
from django.core.serializers import serialize
from django.db.models.query import QuerySet
from django.core.serializers.json import DjangoJSONEncoder
from django.utils import simplejson
from django.template import Library
from django.utils.safestring import mark_safe
register = Library()
def jsonify(object):
if isinstance(object, QuerySet):
return mark_safe(serialize('json', object))
return mark_safe(simplejson.dumps(object, cls=DjangoJSONEncoder))
register.filter('jsonify', jsonify)
当我想 jsonify 整个 QuerySet 时,这很好用。但是我无法对查询集中的单个项目进行 jsonify。
{% for t in ticket_set %}
<tr class="clickableRow tip-top" onclick="rowClick('{{ t | jsonify }}');" >
{% endfor %}
当模板标签尝试将单个项目 t 而非整个集合 ticket_set json 化时,我收到错误:
<ProblemTicket: SMITH, JOHN - XXXXXXXXX; 2014-07-16 19:09:21.140000+00:00> is not JSON serializable
看起来它正在尝试将它从调用 __str__ 得到的结果 json 化,该模型对象的定义如下:
def __str__(self):
return "%s, %s - %s; %s" % (self.person.last_name, self.person.first_name, self.serial_number, self.date_time)
我需要做什么才能让我的 jsonify 方法在单个 django 模型对象而不是一组模型对象上正常工作?
【问题讨论】:
-
我不认为
__str__有问题,因为它的返回值是一个字符串,肯定是JSON可序列化的。
标签: python json django django-models