usuarios - recuperar contraseña django
Django-Crear perfil de usuario en la creación del usuario (3)
No debes usar:
user = models.ForeignKey(User, unique=True)
En su lugar usa esto:
from django.conf import settings
..
user = models.OneToOneField(settings.AUTH_USER_MODEL)
Estoy siguiendo la documentación de Django here para lograr un objetivo simple: crear un perfil de usuario tan pronto como se cree un nuevo usuario.
Tengo una aplicación de ''cuentas'' y mis cuentas.modelos se parecen a esto:
# -*- coding: utf-8 -*-
from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from main.models import Store
class UserProfile(models.Model):
GENRE_CHOICES = (
(''m'', ''Masculino''),
(''f'', ''Feminino''),
)
MARITAL_STATUS_CHOICES = (
(''s'', ''Solteiro''),
(''c'', ''Casado''),
(''d'', ''Divorciado''),
(''v'', ''Viúvo''),
)
user = models.ForeignKey(User, unique=True)
birth_date = models.DateField()
genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
address = models.CharField(max_length=150)
postal_code_4 = models.PositiveIntegerField()
postal_code_3 = models.PositiveIntegerField()
locatity = models.CharField(max_length=30)
marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES)
child_amount = models.PositiveSmallIntegerField()
is_merchant = models.BooleanField(default=False)
store = models.ForeignKey(Store, null=True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
Todo me parece bien, pero cuando intento agregar un nuevo usuario (usando django admin), en lugar de tener un usuario y un perfil de usuario recién creados , aparece el siguiente error: InternalError at / admin / auth / user / add / current transaction is abortados, los comandos ignorados hasta el final del bloque de transacción
Aquí está la parte del error de rastreo:
/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile
34: UserProfile.objects.create(user=instance)
Parece un error de integridad, pero no entiendo el motivo.
Sería genial si alguno de ustedes pudiera ayudarme con esto.
Sólo lo descubrí.
Olvidé agregar null=True
al resto de los campos del modelo UserProfile
.
Así que los campos accounts.models.UserProfile
ahora se ven como:
user = models.ForeignKey(User, unique=True)
birth_date = models.DateField(null=True)
genre = models.CharField(max_length=1, choices=GENRE_CHOICES, null=True)
address = models.CharField(max_length=150, null=True)
postal_code_4 = models.PositiveIntegerField(null=True)
postal_code_3 = models.PositiveIntegerField(null=True)
locatity = models.CharField(max_length=30, null=True)
marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES, null=True)
child_amount = models.PositiveSmallIntegerField(null=True)
is_merchant = models.BooleanField(default=False)
store = models.ForeignKey(Store, null=True)
... y todo está funcionando como es debido!
Saludos por intentar ayudar a Ashray ^^
def create_profile(sender,**kwargs ):
if kwargs[''created'']:
user_profile=UserProfile.objects.create(user=kwargs[''instance''])
post_save.connect(create_profile,sender=User)
Creo que esto te ayudará.