解析json在模板中的django modelformset中返回
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析json在模板中的django modelformset中返回相关的知识,希望对你有一定的参考价值。
在由modelformset_factory()生成的formset中返回到我的模板的字段之一是JSONField。我想解析json并在表单中单独显示元素,只读。
如果我只使用我创建的内置过滤器get()返回查询集列表,这很容易做到。但它必须采用一种形式,为用户填充一些附加字段。
{% for foo in foo_list %}
<h5>{{ foo.json|get:"title" }}</h5>
{% endfor %}
问题是对formset字段做同样的事情我得到错误“'BoundField'对象没有属性'get'”
{% for form in formset %}
<h5>{{ form.json|get:"title" }}</h5>
{% endfor %}
这是过滤器:
@register.filter(name='get')
def get(d, k):
print('get(d,k):',d,k)
return d.get(k, None)
视图的相关位:
...
foo_list = Foo.objects.all()
...
FooFormset = modelformset_factory(
Foo, fields = ['task_id','authority','dataset','place_id',
'authrecord_id','json'], form=FooModelForm, extra=0)
formset = FooFormset(request.POST or None, queryset=foo_list)
context['formset'] = formset
...
return render(request, 'datasets/review.html', context=context)
答案
我发现将自定义过滤器应用于form.json.value就可以了。新过滤器将该(文本)值转换为json,我可以从中为特定键执行get操作。
新的过滤器:
@register.filter(name='get')
def get(d, k):
jd = json.loads(d)
return jd.get(k, None)
及其在模板中的实现:
{{ form.json.value|get:"names" }}
BoundField.value是文本,即使db中有json,也需要转换回来进行解析。
以上是关于解析json在模板中的django modelformset中返回的主要内容,如果未能解决你的问题,请参考以下文章