Python ModelForm.Meta中的条件字段
假设我们在Django应用程序中有一个自定义用户模型。为了使它可以从管理页面进行修改,我们需要定义一些表单 下面是用于修改自定义用户模型实例的Python ModelForm.Meta中的条件字段,python,django,Python,Django,假设我们在Django应用程序中有一个自定义用户模型。为了使它可以从管理页面进行修改,我们需要定义一些表单 下面是用于修改自定义用户模型实例的UserChangeForm class UserChangeForm(forms.ModelForm): class Meta: model = MyCustomUser fields = ( ..., 'email', 'is_activ
UserChangeForm
class UserChangeForm(forms.ModelForm):
class Meta:
model = MyCustomUser
fields = (
...,
'email',
'is_active',
'is_admin',
'groups',
....
)
问题是:如何基于模型实例在Meta
类中实现条件字段
(即超出Meta的范围)?
目标是声明如下内容
def get_fields(self):
if self.instance.is_company:
return ('email', 'company_name', 'headquarters')
else:
return ('email', 'first_name', 'last_name')
在外部类中,找到将函数结果注入
Meta.fields
的方法。有什么想法吗?您可以在\uuuu init\uuuu()构造函数中删除表单中的字段:
class UserChangeForm(forms.ModelForm):
class Meta:
fields = ('email', 'company_name', 'headquarters',
'first_name', 'last_name', )
def __init__(self, *args, **kwargs):
super(UserChangeForm, self).__init__(*args, **kwargs)
if self.instance.is_company:
fields_to_delete = ('first_name', 'last_name')
else:
fields_to_delete = ('company_name', 'headquarters')
for field in fields_to_delete:
del self.fields[field]
您可以从\uuuu init\uuuu()
构造函数中的表单中删除字段:
class UserChangeForm(forms.ModelForm):
class Meta:
fields = ('email', 'company_name', 'headquarters',
'first_name', 'last_name', )
def __init__(self, *args, **kwargs):
super(UserChangeForm, self).__init__(*args, **kwargs)
if self.instance.is_company:
fields_to_delete = ('first_name', 'last_name')
else:
fields_to_delete = ('company_name', 'headquarters')
for field in fields_to_delete:
del self.fields[field]
如果您使用的是Django管理员,那么可以使用该方法
如果您使用的是Django管理员,那么可以使用该方法
干得好。顺便问一下,你有没有一个链接来解释那些Meta
类在幕后是如何工作的?我很惊讶,我们只需要做一个self.fields
就可以访问这些字段(而不是像我预期的那样self.Meta.fields
)。字段的表单API
:做得很好。顺便问一下,你有没有一个链接来解释那些Meta
类在幕后是如何工作的?我很惊讶,我们只需要做一个self.fields
就可以访问这些字段(而不是像我预期的那样self.Meta.fields
)