Django передает модель виджету в ModelForm - PullRequest
0 голосов
/ 02 июня 2019

У меня есть ModelForm, в котором есть дополнительное поле, являющееся пользовательским виджетом.Я могу добавить дополнительное поле с виджетом и передать ему произвольные значения ключа при создании виджета.Я также могу получить доступ к данным модели в ModelForm в функции __init__.

Моя проблема заключается в том, что для добавления дополнительного поля в ModelForm требуется сделать это вне функции __init__хотя доступ к данным модели возможен только из функции __init__.

class SomeForm(forms.ModelForm):
        title = None
        def __init__(self, *args, **kwargs):
                some_data = kwargs['instance'].some_data
                # ^ Here I can access model data.
                super(SomeForm, self).__init__(*args, **kwargs)
                self.fields['some_extra_field'] = forms.CharField(widget= SomWidget())
                # ^ This is where I would pass model data, but this does not add the field.
        class Meta:
                model = Page 
                fields = "__all__"
        some_extra_field = forms.CharField(widget= SomeWidget())
        # ^ I can add a field here, but there's no way to pass some_data to it.

Я также пытался установить self.some_data в __init__, но он все еще недоступен, когда я пытаюсь использовать self.some_data при установке some_extra_field в конце класса.

Как передать данные модели в виджет в ModelForm?

1 Ответ

1 голос
/ 02 июня 2019

Если я правильно понимаю, что вам нужно, вы можете сделать это, просто отредактировав или переназначив виджет в __init__. Что-то вроде:

class SomeForm(forms.ModelForm):
    title = None
    def __init__(self, *args, **kwargs):
        some_data = kwargs['instance'].some_data
        super(SomeForm, self).__init__(*args, **kwargs)
        # Pass whatever data you want to the widget constructor here
        self.fields['some_extra_field'].widget = SomWidget(foo=...))
        # or possibly (depending on what you're doing)
        self.fields['some_extra_field'].widget.foo = ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...