【问题标题】:Unpacking a JSONField into multiple django form fields将 JSONField 解压缩到多个 django 表单字段中
【发布时间】:2019-02-11 04:51:28
【问题描述】:

我在我的 Django 模型中使用来自 django.contrib.postgres.fields 的 JSONField。我想设置我的更新表单,以便它查看传递给它的对象,从 JSON 字段遍历 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”对象不可迭代

关于我缺少什么的任何想法?

【问题讨论】:

    标签: python json django postgresql


    【解决方案1】:

    我不确定您使用的是什么视图,但假设它是一个将传递您尝试编辑的数据库行实例的视图(例如带有将 pk 传递给它的 URL 的 UpdateView) ,

    你可以在你的表单中试试这个:

    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]
    

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

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多