Динамически включая / исключая поля из мета-класса Django ModelForm - PullRequest
1 голос
/ 19 февраля 2020

Допустим, у меня есть форма, такая как:

from django import forms

class Foo(forms.ModelForm):
    class Meta:
        model = SomeModel
        fields = ('field1', 'field2', 'field3')

Как я могу включить или исключить поля, основанные на каком-либо условии?

Редактировать:

Моя ошибка, Я должен был уточнить, что условие должно быть сделано на основе значения в каждой модели, которая отображается. Это означает, что мне нужно добавить (или удалить) поля на основе значений модели, которая в данный момент отображается.

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете изменить поля формы с помощью __init__:

from django import forms

class Foo(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if condition:
            self.fields.pop('field1')

    class Meta:
        model = SomeModel
        fields = ('field1', 'field2', 'field3')

Обратите внимание, что это может привести к сбою проверки формы, если поле является обязательным.

Лучше было бы скрыть поле, а не удалять его полностью:

class Foo(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if condition:
            form.fields['field1'].widget = forms.HiddenInput()

    class Meta:
        model = SomeModel
        fields = ('field1', 'field2', 'field3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...