2017-12-05 1 views
0

Ich versuche, ein Signal zu machen, dass ein Client-Objekt oder Director erstellt Objekt von der Art des CustomUser abhängig:Django Signale für das gleiche Modell schaffen

class CustomUser(AbstractEmailUser): 
    TYPE = (
     (0, 'Client'), 
     (1, 'Director'), 

    type = models.PositiveSmallIntegerField(default=0, choices=TYPE) 


class Client(models.Model): 
    user = models.OneToOneField(CustomUser) 


class Director(models.Model): 
    user = models.OneToOneField(CustomUser) 


def post_save_data(sender, instance, created, **kwargs): 
    if created and CustomUser.objects.get(email=instance.email).type == 0: 
     Client.objects.create(user=instance) 
    elif created and CustomUser.objects.get(email=instance.email).type == 1: 
     Director.objects.create(user=instance) 


post_save.connect(post_save_data, sender=CustomUser) 

Was auch immer ich es tun schafft immer Objekt für Kunden, Auch wenn ich Typ 1 wähle.

+0

Können Sie Ihre 'AbstractEmailUser'-Klasse veröffentlichen? Und was passiert, wenn Sie 'type = models.PositiveSmallIntegerField (default = 1, selectives = TYPE)' ändern, erstellt es dann Director? – akimul

+0

Es gibt hier einen Fehler: 'TYPE = ((0, 'Client'), (1, 'Director'),'. Sie müssen das schließende ') hinzufügen' wie 'TYPE = ((0, 'Client') (1, "Direktor"),) '. – akimul

+0

Ja, aber das ist nicht das Problem –

Antwort

0

Ich benutze den folgenden Code und von django admin, wenn ich benutzerdefinierte Benutzer durch Auswahl von Client erstellen, erstellt es Client und wenn Director auswählen erstellt Director.

class AbstractEmailUser(models.Model): 
    email = models.TextField(max_length=100) 


class CustomUser(AbstractEmailUser): 
    TYPE = (
     (0, 'Client'), 
     (1, 'Director'), 
    ) 

    type = models.PositiveSmallIntegerField(default=0, choices=TYPE) 


class Client(models.Model): 
    user = models.OneToOneField(CustomUser) 


class Director(models.Model): 
    user = models.OneToOneField(CustomUser) 


def post_save_data(sender, instance, created, **kwargs): 
    # if created and CustomUser.objects.get(email=instance.email).type == 0: 
    #  Client.objects.create(user=instance) 
    # elif created and CustomUser.objects.get(email=instance.email).type == 1: 
    #  Director.objects.create(user=instance) 
    if created: 
     c_user = CustomUser.objects.get(email=instance.email) 
     print(c_user.type) 
     if c_user.type == 0:   
      Client.objects.create(user=instance) 
     elif c_user.type == 1: 
      Director.objects.create(user=instance) 


post_save.connect(post_save_data, sender=CustomUser) 

Der kommentierte Code oben auf post_save_data arbeitete auch für mich. Ich habe AbstractEmailUser Klasse als Beispiel verwendet.

Verwandte Themen