gpt4 book ai didi

python - Django jsonify 模板内的单个模型对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:47 25 4
gpt4 key购买 nike

我有一个 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)

当我想要对整个 QuerySet 进行 jsonify 时,这很好用。但是我无法仅对查询集中的单个项目进行 jsonify。

{% for t in ticket_set %}
<tr class="clickableRow tip-top" onclick="rowClick('{{ t | jsonify }}');" >

{% endfor %}

当模板标签试图 jsonify 单个项目 t 而不是整个集合 ticket_set 我得到一个错误:

<ProblemTicket: SMITH, JOHN - XXXXXXXXX; 2014-07-16 19:09:21.140000+00:00> is not JSON serializable

它看起来像是在尝试对从模型对象上调用 __str__ 返回的结果进行 jsonify,该模型对象定义如下:

def __str__(self):
return "%s, %s - %s; %s" % (self.person.last_name, self.person.first_name, self.serial_number, self.date_time)

为了让我的 jsonify 方法在单个 django 模型对象而不是一组模型对象上正确工作,我需要做什么?

最佳答案

这会起作用,但 json 将是一个数组:

def jsonify(object):
if isinstance(object, QuerySet):
return mark_safe(serialize('json', object))
return mark_safe(serialize('json', [object]))

这将删除数组包装器,但它很难看:

def jsonify(object):
if isinstance(object, QuerySet):
return mark_safe(serialize('json', object))
return mark_safe(json.dumps(json.loads(serialize('json', [object])))[0])

最好以某种方式让 DjangoJSONEncoder 正确序列化对象,但我不知道如何...

关于python - Django jsonify 模板内的单个模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com