Ich folge Django Dokumentation here, um ein einfaches Ziel zu erreichen: Erstellen Sie ein Benutzerprofil, sobald ein neuer Benutzer erstellt wird.Django - Benutzerprofil bei der Benutzererstellung erstellen
Ich habe ein ‚Konten‘ App und mein accounts.models sieht wie folgt aus:
# -*- 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)
Alles sieht mir gut, aber wenn Sie einen neuen Benutzer hinzuzufügen versucht (mit django admin), anstatt einem von mit neu erstellten Benutzer und Benutzerprofil, erhalte ich folgende Fehlermeldung: InternalError bei/admin/auth/user/add/ aktuelle Transaktion abgebrochen wird, ignoriert Befehle bis zum Ende des Transaktionsblock
Hier ist der Teil Zurückverfolgungsfehler :
/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile
34: UserProfile.objects.create(user=instance)
Es scheint wie ein Integritätsfehler, aber ich bekomme nicht den Grund dafür.
Wäre toll, wenn jemand von euch mir dabei helfen könnte.
Haben Sie die Django-Symbolleiste installiert? Wenn ja, versuchen Sie es zu deaktivieren, damit Sie bessere Fehlerinformationen erhalten. –