Скрывать поле ModelForm согласно профилю пользователя используя UpdateView - Джанго

У меня есть формуляр запросов, который обладает двумя полями (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'? какие подсказки они могли бы делать мне, чтобы скрывать это поле согласно профилю?

0
задан 02.11.2019, 21:00
1 ответ

Тестирует 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'

0
ответ дан 01.12.2019, 13:02

Теги

Похожие вопросы