Распаковка JSONField в несколько полей формы Django - PullRequest
0 голосов
/ 06 сентября 2018

Я использую JSONField из django.contrib.postgres.fields в моей модели Django. Я хочу настроить форму обновления так, чтобы она смотрела на передаваемый в нее объект, перебирает 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 Ответ

0 голосов
/ 31 июля 2019

Я не уверен, какое представление вы используете, но при условии, что это представление будет передавать экземпляр строки БД, которую вы пытаетесь редактировать (например, 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]

Если вы не используете представление, которое делает это, вам нужно будет передать экземпляр самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...