Melhor forma para estender User model com herança

973 views
Skip to first unread message

Johnny W. Santos

unread,
Jun 27, 2012, 10:08:01 AM6/27/12
to django...@googlegroups.com
Bom dia pessoal.

Qual é a melhor forma de estender o model User?

1. Criar um user profile associando a um campo 1-to-1 com o user.

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True, related_name='profile')
    timezone = models.CharField(max_length=50, default='Europe/London')

2.  Herdar da classe de usuário normal e adicionar alguns campos.

from django.contrib.auth.models import User

class CustomUser(User):
    """User with app settings."""
    timezone = models.CharField(max_length=50, default='Europe/London')


--
Johnny W. dos Santos
  

Mauro Alexandre

unread,
Jun 27, 2012, 7:05:48 PM6/27/12
to django...@googlegroups.com
Eu particularmente prefiro criar uma nova model com uma foreing key para user, conforme seu exemplo numero [1].

Seguindo a documentação https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users ela te leva a esse caminho, e se torna muito interessante a implementação dessa forma, afinal o django te permite definir qual será sua classe de "perfil de usuario" no settings através da atribuição AUTH_PROFILE_MODULE, e apartir dai voce pode usar o metodo get_profile(), em um model do tipo User.

Bom, essa é a minha opnião.

Abraços.

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Gileno Alves

unread,
Jun 27, 2012, 11:08:14 PM6/27/12
to django...@googlegroups.com
Lembre-se que está no num banco de dados relacional, estender o User não irá funcionar com bibliotecas de terceiros e app's internas de django.

2012/6/27 Johnny W. Santos <johnny....@gmail.com>

--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>



--
Gileno Filho, Web Developer

Matheus R.

unread,
Jun 28, 2012, 8:15:40 AM6/28/12
to django...@googlegroups.com
Costumo sempre fazer da segunda maneira, porque aí vc fica, digamos, "livre" para trabalhar com outras coisas.

[]'s

--Matheus

Guilherme Carvalho

unread,
Jun 29, 2012, 2:04:28 PM6/29/12
to django...@googlegroups.com
Eu segui a documentação, entretanto verifiquei um problema, pois no meu caso tenho vários perfis de "User" no sistema e cada um com dados exclusivos e na hora de registrar o Admin foi que gerou o problema, pois não consegui registrar o Admin do User associado ao Admin de cada um dos Perfis.

Na maneira que fiz, não sei se é a correta, fico assim:

Admin.py

from ...

class UserAdmin(admin.ModelAdmin):
    pass

class FuncionarioAdmin(admin.ModelAdmin):
    Campos específicos do model Funcionario

class ClienteAdmin(admin.ModelAdmin):
    Campos específicos do model Cliente

admin.site.unregister(User)
admin.site.register(User, FuncionarioAdmin)

E como faço para registrar o ClienteAdmin? Posso adicionar uma outra linha admin.site.register(User, ClienteAdmin), ficando

admin.site.unregister(User)
admin.site.register(User, FuncionarioAdmin)
admin.site.register(User, ClienteAdmin)

Atenciosamente,

Guilherme de Carvalho Carneiro
Analista de sistemas
twitter: @GCarneiro
http://djangopeople.net/guilhermecarvalho/


2012/6/27 Mauro Alexandre <upm...@gmail.com>

Alexandre Provencio

unread,
Jun 29, 2012, 4:24:33 PM6/29/12
to django...@googlegroups.com
Também tenho muitas dúvidas em relação a esse assunto. Até fiz uma pergunta aqui na lista quase que ao mesmo tempo desta, com assunto "Models e diferentes tipos de usuários". Reparei que algumas pessoas costumam usar proxy models em um perfil base para controlar os diferentes tipos de usuários. Alguns links:

http://stackoverflow.com/questions/678496/whats-the-best-way-to-have-different-profiles-for-different-kinds-of-users-in-d
http://stackoverflow.com/questions/3772556/different-user-profiles-with-django-profiles-django-registration
http://www.mahner.org/posts/separating-staff-and-user-accounts-in-djangos-admin/



2012/6/29 Guilherme Carvalho <desenvol...@gmail.com>
Reply all
Reply to author
Forward
0 new messages