动态地从Django ModelForm的元类中包括/排除字段

2024-09-30 03:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个表格,比如:

from django import forms

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

如何根据某些条件包括或排除字段

编辑:

我的错是,我应该澄清,条件需要根据渲染的每个模型上的值来确定。这意味着我需要根据当前渲染的模型的值添加(或删除)字段


Tags: djangofrom模型importfieldsmodelfooforms
1条回答
网友
1楼 · 发布于 2024-09-30 03:23:17

您可以通过__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')

相关问题 更多 >

    热门问题