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
- обязательное поле, а изменение таблицы ничего не дает. Где нужно перезаписать сохранение? Это правильный подход или мы что-то упускаем?