Procurei um pouco esses dias sobre como utilizar o Profile no django, mas a documentação dele deixou muito a desejar, não temos ali exemplos de como incluir os dados do profile no banco, bem ao menos como recuperá-los. O único problema que vejo sobre os Profiles em django é que quando o usuário é criado o mesmo também não pode ser criado junto, os modelos não fazem parte um do outro. O que leva a nós desenvolvedores a criar manualmente esses profiles e se por algum motivo você esquecer podemos recuperar um erro no meio do programa.
Primeiramente vamos criar um modelo para o profile, veja abaixo como fiz a minha estrutura:
Código do Model:
1 2 3 4 5 6 7 8 9 10 11 12 | #-*- coding: utf-8 -*- from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): # This is the only required field user = models.ForeignKey(User, unique=True) # The rest is completely up to you... empresa = models.IntegerField() karma = models.IntegerField(default=1) url = models.URLField(default="") |
Depois disso temos que configurar em nosso setings.py do projeto o seguinte atributo:
1 | AUTH_PROFILE_MODULE = 'usuario.profile.UserProfile' |
Obs: Não coloque o nome do projeto use apenas o nome da aplicação e o nome do Model no nosso caso o UserProfile
Instale também o aplicativo no Installed Apps: ‘galileu.usuario.profile’,
Veja o código para você criar o profile ao criar o usuário:
Você pode inserir o código abaixo na view que cria os usuários em seu projeto.
1 2 3 4 5 6 | new_user = UsuarioForm(request.POST) userinstancia = new_user.UsuarioAdd() #aqui nós criamos o profile, insira nos parâmetros abaixo os dados de acordo com a sua necessidade profile = UserProfile(user=userinstancia, empresa=instancia.id) profile.save() |
Veja como pegar o Profile:
1 2 | user = User.objects.get(pk = user_id) profile = user.get_profile() |
Valdinei dos Santos
Gostei do seu tutorial e suas dicas, com uma ressalva. Não entendi essa parte do código
“””
# O que é UsuarioAdd()? O que ele faz?
userinstancia = new_user.UsuarioAdd()
#aqui nós criamos o profile, insira nos parâmetros abaixo os dados de acordo com a sua necessidade
#UserProfile é sua classe de modelo com o atributo user, correto? o que vem a ser instancia.id?
profile = UserProfile(user=userinstancia, empresa=instancia.id)
#Porque você esta salvando se ainda não foi renderizado para o preenchimento?
profile.save()
Desculpe tantas perguntas é que estou fazendo um cadastro e preciso colocar mais dados e o google + a lista de django apontam para a documentação que para mim nao esta muito clara…
Caso você responda por favor me mande um email notificando para que eu veja a resposta?
oraculum
@Valdinei dos Santos, Blz man nós estamos aqui para ajudar mesmo eu já passei por todas essas dores de cabeça que você está passando e elas não param aí django vale muito a pena aprender pois é uma linguagem maravilhosa.
vamos a primeira dúvida:
1 – UsuarioAdd() é um metodo do meu form Usuario que é onde faço a inserção do usuário “manualmente” ao invés de deixar a cargo do django eu não vou inserir todos os dados na minha classe usuario então eu manipulo no UsuarioAdd aquilo que me é conveniente, veja minha classe como é:
2 – Ela é uma classe model e tem os atributos mostrados acima: user, empresa, karma e url e no caso do instancia.id é uma instancia de outra parte de código do galileu (projeto que estou desenvolvendo).
Ela na verdade é uma instancia tipo a userinstancia que eu mostrei acima só que ele recebe o model Empresa daí eu pego o id da Empresa em que o usuário que está sendo inserido.
Por exemplo caso queira preencher além da empresa o url eu faria assim
profile = UserProfile(user=userinstancia, empresa=instancia.id, url=’http://oraculum.blog.br’)
Depois apenas chamo o metodo Save da model UserProfile e o django se encarrega de inserir no banco 🙂
Qualquer dúvida post aqui novamente.
ps. Caso queira ter uma ideia de alguns códigos que eu já fiz baixe via svn o projeto galileu (http://sourceforge.net/projects/galileu/develop) ele é open source e livre.