Extendendo User do Django


Opa!!!

Bom, resolvi criar o artigo ou post (sei lá) pois tenho acompanhado na lista diversas dúvidas à este respeito.
O cabra quer criar usuários utilizando o User que o próprio Django oferece, mas com alguns campos que são pertinentes a aplicação dele.

Na própria documentação do Django, tem uma explicação bacana de como se fazer:
http://docs.djangobrasil.org/topics/auth.html#armazenando-informa-es-adicionais-sobre-usu-rios

Outro artigo muito bom (inglês) é este aqui.
http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance

Eu implementei utilizando o artigo acima, só que ele apresenta um “problema”. Não sei se realmente é um bug do Django ou o que pode ser.
O fato é que mesmo ao se extender o Users do Django, quando você cria o novo usuário, a senha não é encriptada.
Perguntei na lista e fui aconselhado a sobrescrever o método save do User.
Não achei que fosse a melhor solução, mas no fim das contas, foi o que tive que fazer.

Como eu só utilizava a rotina de adição de usuários através do admin, ficou muito fácil de sobrescrever o método.
Eu criei uma classe padrão para o Admin dos meus usuários e todas as outras classes referentes extendiam dela 😉

Ficou assim:

class defaultAdminModel(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.set_password(obj.password)
        obj.save()

As outras classes ficaram assim:

class AdminLocaisAtendimento(defaultAdminModel):

Enfim, é isto 😛

Abraços!

Deixe um comentário