У меня есть формуляр запросов, который обладает двумя полями (nombreMail и состояние). Но я хочу, чтобы, когда у пользователя будет профиль, отличный от "информатики", он скрыл бывшее поле для того, чтобы он не смог смениться на этот.
То, что я пробовал сделать, но еще не добился того, чтобы оно функционировало, так как меня бросает ошибка TypeError: __init__() got an unexpected keyword argument 'user'
, - sobreescribir метод __init__()
SolicitudForm
в forms.py и с другой стороны, sobreescribir метод get_form_kwargs()
чтобы пользователь request может происходить с form запроса. Я оставляю им код, который я понимаю значимо:
views.py:
...
class SolicitudUpdate(UpdateView):
model = Solicitud
form_class = SolicitudForm
template_name = 'solicitud/solicitud_form.html'
success_url = reverse_lazy('solicitud:solicitud_listar')
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
forms.py:
class SolicitudForm(forms.ModelForm):
class Meta:
model = Solicitud
fields = [
'nombreMail',
'estado',
]
labels = {
'nombreMail': 'Nombre de la casilla de correo incluyendo @dominio.ejemplo',
'estado': 'Estado de la solicitud:'
}
widgets = {
'nombreMail': 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_informatica == False:
self.fields.pop('estado')
models.py
...
class Solicitud(models.Model):
nombreMail = models.CharField(max_length=50)
estados = [('1','Pendiente'), ('2','En proceso'), ('3','Realizada')]
estado = models.CharField(max_length=50, choices=estados, default='1')
user = models.ManyToManyField(Solicitante, blank=True)
почему случается ошибка unexpected keyword argument 'user'? какие подсказки они могли бы делать мне, чтобы скрывать это поле согласно профилю?
Тестирует sobrescribir метод init из формуляра SolicitudForm следующей формы:
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
# establece user como un atributo del formulario
self.user = user
if self.user.is_informatica == False:
self.fields.pop('estado')
С этим не был бы должен давать тебе ошибку unexpected keyword argument 'user'