如何在JSONField内的表单中获取不同的字段?

时间:2018-12-29 21:18:11

标签: python django django-forms

我正在一个需要存储可在JSONField内更改的数据的网站上

例如,我的默认JSON类似于:

{
  "apple": [
    [5,10],
    [20,40]
  ],
  "banana": [
    [5,10],
    [20,40]
  ],
  "orange": [
    [5,10],
    [20,40]
  ],
}

然后我的模型将类似于:

from jsonfield import JSONField
...

class MyModel(models.Model):
    name = models.CharField(...)
    fruits = JSONField(default=json)

我当前拥有的表单是:

class MyForm(forms.ModelForm):
    class Meta:
        model = models.MyModel
        fields = (
            'name',
            'fruits'
            )

模板有点棘手,但可以说我有一个代码,可以为JSON中的每个数字打印一个文本框,例如:

{% csrf_token %}
{% for fruit, values in user.MyModel.fruits.items %}
    <input type="text" name="{{fruit}}_0_0" value="{{values.0.0}} id="id_{{fruit}}_0_0">
    <input type="text" name="{{fruit}}_0_1" value="{{values.0.1}} id="id_{{fruit}}_0_1">
    <input type="text" name="{{fruit}}_1_0" value="{{values.1.0}} id="id_{{fruit}}_1_0">
    <input type="text" name="{{fruit}}_1_1" value="{{values.1.1}} id="id_{{fruit}}_1_1">

我无法更改数据库中的值。它不显示错误,只是不起作用。视图文件中的MyForm.is_valid()返回False

1 个答案:

答案 0 :(得分:0)

您将无法验证没有以下内容的表单:

  • 一个csrf令牌(除非您将其禁用)
  • Form中声明的所有字段完全一样,不多于不少

在这里,您必须手动处理表单数据或编写Form才能将水果列表转换为可转换为JSON的对象,然后再将其传递给模型