我创建了一个CBV,我想删除其中的一个或多个字段,具体取决于用户。这个想法是一个工作站点,如果登录的用户是招聘人员,那么employer
字段应该包括在内,否则应该排除它。在
表单.py
class JobCreationForm(forms.ModelForm):
class Meta:
model = Job
# exclude = ['posted', 'provider', 'ext_id']
fields = ('title',
'job_desc',
'agency_name',
'employer',
'contact_name',
)
视图.py
^{pr2}$当前错误是NoneType' object has no attribute '__getitem__'
。在
我的问题:如何基于逻辑从表单中移除字段?我试过这些版本:
self.fields["employer"].delete()
self.fields.remove("employer")
del self.fields["employer"]
有什么提示吗?在
几乎没有办法解决这个问题。在
我发现有两种不同的形式}可能更简洁。在
RecruiterEmployeeForm
和{然后可以为CBV重写
^{pr2}$ger_form_class
发送额外的}额外的kwargs。在
kwargs
以使用泛型视图方法get_form_kwargs
,并获得额外的kwargs
重写形式的__init__
,以及{在表单.py在
在视图.py在
^{pr2}$实现这一点(根据用户修改表单的字段)的正确方法是在表单的
__init__
方法上执行。但是,为了让表单访问当前用户,您需要从视图中将用户传递给它。为此,您将使用get_form_kwargs
方法。因此,首先将以下方法添加到视图中:现在,您可以将
^{pr2}$__init__
添加到表单中,如下所示:请注意,您首先初始化表单(使用
super.__init__
),然后可以将字段修改为您的核心内容。在相关问题 更多 >
编程相关推荐