Django Modelform с одним пользовательским полем не сохраняется

Мы используем JSONField для хранения некоторых динамических данных в нашем приложении. Мы хотели бы представить эти данные в удобной для пользователя форме и решили использовать таблицу с ключами и значениями. Для этого мы настроили ModelForm в нашем forms.py:

class UserEditForm(ModelForm):
    class Meta:
        model = OUR_MODEL
        fields = ['description',
                  'reference']
        widgets = {
            'reference': CustomJSONWidget(),
        }

Виджет CustomJSONWidget определяется следующим образом:

class CustomJSONWidget(Widget):
    template_name = 'jsonwidget.html'
    
    def get_context(self, name, value, attrs=None):
        return {'widget': {
            'name': name,
            'value': json.loads(value),
            'type': 'table'
        }}

    def render(self, name, value, attrs=None, renderer=None):
        context = self.get_context(name, value, attrs)
        template = loader.get_template(self.template_name).render(context)
        return mark_safe(template)

Наконец, jsonwidget.html выглядит следующим образом:

<table name="{{ widget.name }}">
    ...
    <tbody>
        {% for key, val in widget.value.items %}
            <tr>
                <td><input {% if key != None %} value="{{ key|stringformat:'s' }}"{% endif %} /></td>
                <td><input {% if val != None %} value="{{ val|stringformat:'s' }}"{% endif %} /><td>
            <tr>
        {% endfor %}
    </tbody>
</table>

На странице все выглядит хорошо, именно так, как мы себе это представляли, но сохранение не работает: при попытке обновить description выдает, что reference - обязательное поле, а изменение таблицы ничего не дает. Где нужно перезаписать сохранение? Это правильный подход или мы что-то упускаем?

Вернуться на верх