Как Вы обновляете Метакласс Django Form поля динамично от конструктора формы?

Я хочу обновить Meta.fields динамично. Действительно ли возможно сделать это от конструктора Form? Я попробовал следующее, но year не обнаруживается во время поколения формы. Только name и title отображены.

class Author(models.Model):
    name = ...
    title = ...
    year = ...

class PartialAuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title')

    def __init__(self, *args, **kwargs):
        self.Meta.fields += ('year',)
17
задан Thierry Lam 14 June 2010 в 16:17
поделиться

2 ответа

Нет, это не сработает. Мета анализируется - что удивительно - метаклассом еще до того, как вы дойдете до __ init __ .

Для этого нужно вручную добавить поле в self.fields :

def __init__(self, *args, **kwargs):
    super(PartialAuthorForm, self).__init__(*args, **kwargs)
    self.fields['year'] = forms.CharField(whatever)
17
ответ дан 30 November 2019 в 12:00
поделиться

Внутренний класс Meta уже обрабатывается, когда класс ModelForm создается через метакласс, то есть ДО создания экземпляра. Выполнение того, что вы пытались сделать в __ init __ , не будет работать так!
Вы можете получить доступ к созданным объектам полей в словаре self.fields , например. вы можете сделать что-то вроде self.fields ['year'] = forms.MyFormField (...) .

0
ответ дан 30 November 2019 в 12:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: