Dans mon application, je veux créer des entrées dans certains tableaux lorsqu'un nouvel utilisateur se connecte. Par exemple, je veux créer un profil utilisateur qui va alors faire référence à leur société et de certains autres dossiers pour eux. Je l'ai fait avec un post_save signal:
def callback_create_profile(sender, **kwargs):
# check if we are creating a new User
if kwargs.get('created', True):
user = kwargs.get('instance')
company = Company.objects.create(name="My Company")
employee = Employee.objects.create(company=company, name_first=user.first_name, name_last=user.last_name)
profile = UserProfile.objects.create(user=user, employee=employee, partner=partner)
# Register the callback
post_save.connect(callback_create_profile, sender=User, dispatch_uid="core.models")
Cela fonctionne bien lorsque vous l'exécutez. Je peux utiliser l'administrateur de créer un nouvel utilisateur et les trois autres tables entrées avec des ainsi. (Sauf que c'est, l'employé, car l'utilisateur.prenom et l'utilisateur.le nom ne sont pas remplis dans l'admin du formulaire lors de l'enregistrement. Je ne comprends toujours pas pourquoi c'est fait comme ça)
Le problème est venu quand j'ai couru mon test de suite. Avant cela, j'avais créé un groupe de luminaires pour créer ces entrées dans les tables. Maintenant, je reçois un message d'erreur indiquant:
IntegrityError: duplicate key value violates unique constraint "core_userprofile_user_id_key"
Je pense que c'est parce que j'ai déjà créé une entreprise,les salariés et les fiches de profil de l'appareil avec l'id "1" et maintenant, le post_save signal est d'essayer de le recréer.
Mon questios sont: puis-je désactiver cette post_save signal lors de l'exécution des montages? Puis-je détecter que je suis en cours d'exécution dans le cadre de la suite de test et de ne pas créer ces dossiers? Dois-je supprimer ces enregistrements des appareils (même si le signal n'établit pas par défaut les valeurs que je veux tester contre)? Pourquoi ne pas le gabarit de chargement de code juste remplacer les disques créés?
Comment les gens font cela?