Переопределение конструктора форм с помощью уже существующих данных делает форму недоступной для редактирования - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу переопределить форму, которую я создал, с существующими данными, если профиль пользователя существует, чтобы пользователь мог редактировать данные, которые он, возможно, уже представил.Мой код переопределяет метод init формы, но когда форма отрисовывается, форма имеет текст, но не редактируется.Мне нужно, чтобы он был редактируемым.

Код формы выглядит следующим образом:

class ProfileForm(forms.Form):
    aboutme = forms.CharField( widget=forms.Textarea )
    aboutmeprivate = forms.BooleanField(required=False)
    interestsprivate = forms.BooleanField(required=False)

def __init__(self, *args, **kwargs):
    super(ProfileForm, self)
    self.aboutme = kwargs.pop('aboutme')
    self.aboutmeprivate = kwargs.pop('aboutmeprivate')
    self.interestsprivate = kwargs.pop('interestsprivate')

Вызов выглядит так:

form = ProfileForm(aboutme=exisitingprofile.aboutme, aboutmeprivate=exisitingprofile.aboutmeprivate, interestsprivate=exisitingprofile.interestsprivate)

Кто-нибудь может посоветовать?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Решение состояло в том, чтобы изменить вызов к форме из вида, как показано ниже:

            form = ProfileForm(initial={'aboutme': exisitingprofile.aboutme,
                                    'aboutmeprivate' : exisitingprofile.aboutmeprivate,
                                    'interestsprivate' : exisitingprofile.interestsprivate })

Мне не нужно переопределять конструктор.

0 голосов
/ 03 апреля 2019

Вы должны дать вот так, супер должен прийти после self.your_field, и вы пропустите __init там

class ProfileForm(forms.Form):
    aboutme = forms.CharField( widget=forms.Textarea )
    aboutmeprivate = forms.BooleanField(required=False)
    interestsprivate = forms.BooleanField(required=False)

    def __init__(self, *args, **kwargs):
        self.aboutme = kwargs.pop('aboutme')
        self.aboutmeprivate = kwargs.pop('aboutmeprivate')
        self.interestsprivate = kwargs.pop('interestsprivate')
        super(ProfileForm, self).__init__(*args, **kwargs)

Вы не имеете в виду, что редактирование означает, что поле не кликабельно?

...