我有一个表单,它有两个字段(mail和status)。我只想在用户的配置文件不等于“tech”时隐藏status字段,这样用户就不能在这种情况下更改它的值。你知道吗
我本来想做的,但由于它抛出了我TypeError error: __init __ () got an unexpected keyword argument 'user'
,我仍然没有让它工作,那就是在中覆盖RequestForm的__init __ ()
方法表单.py另一方面,重写get_form_kwargs ()
方法以将用户传递给表单。我发布了我理解的相关代码:
视图.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
表单.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')
型号.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' *
错误?根据用户的配置文件,您可以提出哪些建议来隐藏该字段?你知道吗
我建议在RequestUpdate中只重写get\u form方法,如下所示:
我不知道为什么你的代码会失败,但是无论如何你可以在视图类中调整你的窗体,这样就不需要做更多的工作了。你知道吗
相关问题 更多 >
编程相关推荐