将 JSONField 解压缩到多个 django 表单字段中
Posted
技术标签:
【中文标题】将 JSONField 解压缩到多个 django 表单字段中【英文标题】:Unpacking a JSONField into multiple django form fields 【发布时间】: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”对象不可迭代
关于我缺少什么的任何想法?
【问题讨论】:
【参考方案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]
如果您不使用执行此操作的视图,则需要自己传递实例。
【讨论】:
以上是关于将 JSONField 解压缩到多个 django 表单字段中的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何从 bradjasper 的 django-jsonfield 升级到 Django 的内置 jsonfield?
Django中的JSONField即使在POST请求后仍保持为空