2016-07-12 13 views
0

Ich habe eine Django-Anwendung, wo es zwei Arten von Benutzeranmeldungen gibt. Consumers und Providers.Django erstellen verschiedene Benutzerprofil Instanzen auf Benutzeranmeldung

Wie stelle ich sicher, dass beim Erstellen eines Benutzers nur die korrekte Profilmodellinstanz erstellt wird

+0

Warum nicht einen Parameter "kind = UserTypes.CONSUMER" oder etwas Ähnliches in Ihre Funktion aufnehmen? – camden

+0

@camdenb, ich bin mir nicht sicher, wo das hingestellt wird. Kannst du es bitte etwas weiter erklären? – Newtt

+0

Die 'UserTypes' sind nicht notwendig, da Sie immer nur einen String (' kind = "Consumer" ') an die Funktion übergeben können, der erste ist weniger anfällig für Tippfehler. Ich fürchte, ich verstehe deine Frage nicht ganz. Wann würden Sie 'create_user_profile' aufrufen? – camden

Antwort

2

Signale sind nicht der richtige Weg, um damit umzugehen. Der richtige Weg besteht darin, diese Logik in Ihre Anmeldefunktion einzufügen:

def sign_up(request): 
    form = SignupForm(request.POST or None, request.FILES or None) 
    if form.is_valid(): 
     user = User.objects.create_user(form.cleaned_data['usern_name'], 
             form.cleaned_data['email'], 
             form.cleaned_data['password']) 
     user.save() 
     if form.cleaned_data['user_type'] == 'consumer': 
     profile = ConsumerProfile() 
     profile.some_field = 'some_value' 
     if form.cleaned_data['user_type'] == 'provider': 
     profile = ProviderProfile() 
     profile.some_field = 'some_value' 
     if profile: 
     profile.user = user 
     profile.save() 
     user.save() 
+0

Einverstanden. Die Verwendung von Signalen kann in vielen Fällen ein Anti-Muster sein. – camden

0

Sie sollten Ihrer Funktion eine Markierung hinzufügen und sie verwenden, um den Typ des Benutzers zu bestimmen, den Sie erstellen möchten. Verwenden Sie einen Wenn-Block, um verschiedene Profile zu erstellen. Etwas wie dieses:

Aber warum möchten Sie eine einzelne Funktion dafür verwenden? Warum nicht zwei Funktionen verwenden und die richtige Anfrage senden?

+0

Weiß der Benutzer selbst, welche Art von Profil er benötigt? Woher weißt du generell, welche Art von Profil für jeden Benutzer aussehen soll? Wenn der Benutzer tatsächlich eine Art von Flag hat, um dies zu bestimmen, können Sie ihn für Ihre if-Bedingung verwenden. – Ariestinak

Verwandte Themen