[Python] Django admin utilizar os atributos da request

Discussão em 'Python' iniciado por Stack, Novembro 19, 2024.

  1. Stack

    Stack Membro Participativo

    Estou desenvolvendo uma aplicação em Django e utilizei os dados da request no form para validar alguns campos.

    Por exemplo, se o usuário que estiver alterando o form for do grupo "Administrador", ao mudar a senha do usuário ele não precisa informar a senha antiga.

    Porém, quando vou salvar uma alteração de usuário no admin, ele dá um erro justamente por não estar recebendo o atributo request.

    Abaixo seguem os códigos do form em que utilizei o clean method para determinados atributos. Alguém sabe como receber os atributos da request no admin?

    Método init alterado para receber a request:

    def __init__(self, *args, **kwargs):
    self.request = kwargs.pop('request', None)
    super(UserChangeForm, self).__init__(*args, **kwargs)
    f = self.fields.get('user_permissions', None)
    if f is not None:
    f.queryset = f.queryset.select_related('content_type')


    Método clean para o campo groups:

    def clean_groups(self):
    if self.request.user.groups.all() or self.request.user.is_staff:
    if self.request.user.groups.filter(name="Administrador") or self.request.user.is_staff:
    return self.cleaned_data['groups']
    else:
    if list(self.cleaned_data['groups']) == list(self.request.user.groups.all()):
    return self.cleaned_data['groups']
    else:
    raise forms.ValidationError(
    self.error_messages['non_administrator'],
    code='non_administrator',
    )
    elif not self.request.user.groups.all() and self.cleaned_data['groups']:
    raise forms.ValidationError(
    self.error_messages['non_administrator'],
    code='non_administrator',
    )
    elif not self.request.user.groups.all() and not self.cleaned_data['groups']:
    return self.cleaned_data['groups']

    Continue reading...

Compartilhe esta Página