Django-créer un profil d'utilisateur sur la création d'utilisateur
je suis documentation de Django ici dans le but d'atteindre un objectif simple: Créer un profil utilisateur dès qu'un nouvel utilisateur est créé.
j'ai une application' comptes ' et mes comptes.modèles ressemble à ceci:
# -*- 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)
tout me semble parfait mais quand j'essaie d'ajouter un nouvel utilisateur (en utilisant django admin), au lieu d'avoir un profil d'utilisateur nouvellement créé, j'obtiens l'erreur suivante: InternalError à /admin/auth/utilisateur/ajouter/ actuel transaction est annulée, les commandes ignorées jusqu'à la fin du bloc de transaction
Voici la partie erreur traceback:
/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile
34: UserProfile.objects.create(user=instance)
cela ressemble à une erreur d'intégrité mais je ne vois pas pourquoi.
ce Serait génial si tout de toi pourrait me donner un peu d'aide sur ce.
3 réponses
Juste pensé à elle.
j'ai oublié d'ajouter null=True
au reste de UserProfile
champs du modèle.
accounts.models.UserProfile
champs ressemble maintenant à:
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)
...et tout fonctionne comme prévu!
bravo pour essayer de les aider, Ashray ^^
Vous ne devriez pas utiliser:
user = models.ForeignKey(User, unique=True)
au Lieu d'utiliser ceci:
from django.conf import settings
..
user = models.OneToOneField(settings.AUTH_USER_MODEL)
def create_profile(sender,**kwargs ):
if kwargs['created']:
user_profile=UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile,sender=User)
je pense que cela vous aidera.