我有一个包含两个字段(邮件和状态)的表格。我只想在用户配置文件不等于“ tech”的情况下隐藏状态字段,以免用户在这种情况下无法更改其值。
我正在尝试做的事情,但是仍然无法正常工作,因为它使我TypeError error: __init __ () got an unexpected keyword argument 'user'
丢了,它是要覆盖form.py中的RequestForm的__init __ ()
方法覆盖get_form_kwargs ()
方法以将用户传递给表单。我发布了我了解的相关代码:
views.py:
...
class RequestUpdate(UpdateView):
model = Request
form_class = RequestForm
template_name = 'request/request_form.html'
success_url = reverse_lazy('request:request_list')
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
forms.py:
class RequestForm(forms.ModelForm):
class Meta:
model = Request
fields = [
'mail','status',]
labels = {
'mail': 'E-Mail (including @domain.example)','status': "Request's status:"
}
widgets = {
'mail': forms.EmailInput(attrs={'class': 'form-control'}),}
def __init__(self,*args,**kwargs):
self.user = kwargs.pop('user',None)
super().__init__(*args,**kwargs)
if self.user.is_tech == False:
self.fields.pop('status')
models.py
...
class Request(models.Model):
mail = models.CharField(max_length=50)
states = [('1','Pending'),('2','In process'),('3','Done')]
status = models.CharField(max_length=50,choices=states,default='1')
user = models.ManyToManyField(Requester,blank=True)
为什么会发生* unexpected keyword argument 'user' *
错误?您可以根据用户个人资料提出什么建议来隐藏该字段?