解析json在模板中的django modelformset中返回

问题描述 投票:0回答:1

在由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)
django django-templates formset
1个回答
0
投票

我发现将自定义过滤器应用于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,也需要转换回来进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.