Одно из полей, возвращаемых в мой шаблон в наборе форм, сгенерированном modelformset_factory(), — это JSONField. Я хотел бы разобрать json и отображать в нем элементы отдельно внутри формы, только для чтения.
Это легко сделать, если я просто верну список наборов запросов, используя созданный мной встроенный фильтр get(). Но это должно быть в форме, в которой есть несколько дополнительных полей для заполнения пользователями.
{% for foo in foo_list %}
<h5>{{ foo.json|get:"title" }}</h5>
{% endfor %}
Проблема в том, что, делая то же самое для поля набора форм, я получаю сообщение об ошибке «Объект 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)
foo
— это форма, аfoo.json
— это поле: это место для ввода JSON в строковом формате. На самом деле это не сам JSON. Чего вы пытаетесь достичь здесь? - person Daniel Roseman   schedule 21.11.2018foo
в первом случае является элементом вfoo_list
, аfoo.json
является объектом json. Но этот первый бит не связан с формами. Проблема заключается в следующем — рендеринг значения BoundField в шаблоне. Я нашел ответ в старой ветке патчей — BoundField.value, описанной в моем ответе ниже. Спасибо - person kgeo   schedule 21.11.2018