将JSONField解压缩为多个Django表单字段

时间:2018-09-06 01:42:09

标签: python json django postgresql

我在Django模型中使用了django.contrib.postgres.fields中的JSONField。我想设置我的更新表单,以便它查看传递给它的对象,从JSONfield遍历JSON,并动态创建适量的CharFields。

models.py:

class myclass(models.Model):
    purpose_section = JSONField()

forms.py:

class myclassForm(forms.ModelForm):
    class Meta:
        model = myclass
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for i in self.fields['purpose_section'].initial:
            self.fields['purpose_section_%s' % i] = forms.CharField(label="purpose_section_" + i,value=i.content)

当我尝试访问页面时,收到错误消息: “ NoneType”对象不可迭代

关于我所缺少的东西有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪个视图,但是假设该视图将传递您要编辑的数据库行实例(例如UpdateView,其URL将pk传递给它) ,

您可以按照自己的形式尝试:

for key in self.instance.purpose_section:
   self.fields[key] = forms.CharField(label=key, max_length=256)
   self.fields[key].initial = self.instance.purpose_section[key]

如果不使用执行该操作的视图,则需要自己传递实例。

相关问题