/ / Mise à jour du profil de l'utilisateur après la création de l'utilisateur dans Django - python, django, django-models, django-views, django-authentication

Mise à jour du profil de l'utilisateur après la création de l'utilisateur dans Django - Python, Django, Modèles Django, Vues Django, Authentification Django

J'ai étendu l'objet utilisateur en utilisant le 1.Méthode 4x en ajoutant un modèle de "profil" personnalisé, puis en l'instanciant lors de l'enregistrement / la création de l'utilisateur. Au cours de mon processus d’inscription, je souhaite ajouter des informations supplémentaires au modèle de profil. La vue est restituée avec succès, mais le modèle de profil n’est pas enregistré. Code ci-dessous:

    user = User.objects.create_user(request.POST["username"], request.POST["email"], request.POST["password"])
user.save()

profile = user.get_profile()
profile.title = request.POST["title"]
profile.birthday = request.POST["birthday"]

profile.save()

Réponses:

6 pour la réponse № 1

mettre à jour votre models.py avec ce code

from django.db.models.signals import post_save
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=User)

maintenant quand tu fais

user.save ()

il créera automatiquement un objet de profil. alors vous pouvez faire

user.profile.title = request.POST["title"]
user.profile.birthday = request.POST["birthday"]
user.profile.save()

J'espère que ça aide.


1 pour la réponse № 2

utilisateur est une instance du modèle utilisateur. Et il semble que vous essayiez d'obtenir une instance qui existe déjà. Cela dépend de ce que vous retournez de user.get_profile. Vous devez lancer l'instance UserProfile. La manière la plus simple pourrait être la suivante:

user_profile = UserProfile.objects.create(user=user)
user_profile.title = request.POST["title"]
...
.
.
user_profile.save()