2016-05-14 11 views
1

私は他のユーザーがプロファイルポストは、信号火災が前に作成、保存、スーパーユーザー機能

を有することができる 例えば.superプロファイルを持っていなければなりません、別のユーザーのタイプに基づいてプロファイルを作成する必要があるいくつかの珍しい問題に捕まってしまっています

iは、ベース・ユーザー・マネージャを

class MyUserManager(BaseUserManager): 
    def create_user(self, username=None, email=None, password=None): 
     """ 
     Creates and saves a User with the given username, email and password. 
     """ 
     if not username: 
      raise ValueError('Must include username') 

     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      username = username, 
      email = self.normalize_email(email), 
      gender='MALE', 
     ) 

     user.set_password(password) 
     user.save(using=self._db) 
     print user 
     return user 

    def create_superuser(self, username, email, password): 
     """ 
     Creates and saves a superuser with the given username, email and password. 
     """ 

     user = self.create_user(
      username=username, 
      email=email, 
      password=password, 
     ) 
     user.is_admin = True 
     print user, user.is_admin 
     user.save(using=self._db) 
     return user 

を拡張した後、私は、プロファイルを作成する以下の信号を使用して、自分のユーザー・モデルを有する

def new_user_receiver(sender, instance, created, *args, **kwargs): 
    if not instance.is_admin: 
     print instance , instance.is_admin , not instance.is_admin 
     new_profile, is_created = UserProfile.objects.get_or_create(user=instance) 
    else: 
     pass 

post_save.connect(new_user_receiver, sender=MyUser) 

私は今直面している問題は、ユーザーが作成され、プロファイルがスーパーユーザー用に作成されるとすぐに上記のシグナルが発せられるということです。

スーパーユーザー用のプロファイルの作成を回避できる方法はありますか?

ありがとうございます。

+0

HMではありません:あなたは、あなたのcreate_superuser機能でこれを呼び出す必要がありますあなたがすでに 'instance.is_adminではない:'に答えているので、あなたの質問で – madzohan

+0

スーパーユーザーのためにshudntであってもそのブロックに入る –

+0

スーパユーザが作成されたときにstance.is_adminはfalseです。本当に恥ずかしいですが –

答えて

0

create_superusercreate_userを使用しているため、管理者用にプロファイルを作成する理由があります。最初は通常のユーザーが保存されます。ここでは、すべてのプロファイルが作成されます。このユーザーは2倍でadminに変更されます。あなたの問題を理解していない、

def create_user(self, username=None, email=None, password=None, is_admin=False): 
     """ 
     Creates and saves a User with the given username, email and password. 
     """ 
     if not username: 
      raise ValueError('Must include username') 

     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      username = username, 
      email = self.normalize_email(email), 
      gender='MALE', 
      is_admin = is_admin, 
     ) 

     user.set_password(password) 
     user.save(using=self._db) 
     print user 
     return user 

    def create_superuser(self, username, email, password): 
     """ 
     Creates and saves a superuser with the given username, email and password. 
     """ 

     user = self.create_user(
      username=username, 
      email=email, 
      password=password, 
      is_admin = True, 
     ) 
     return user 

OR

if instance.is_admin: UserProfile.objects.filter(user=instance).delete()

if not instance.is_admin後...しかし、この方法は、エレガント

+0

なぜプロファイルを削除するのですか... ...そこではスーパーユーザのプロファイルの作成を避けることができません。最初のところで –

+0

TypeError:create_user()は予期しないキーワード引数 'is_admin'を持っています –

+0

申し訳ありませんが、別のものを更新します。 – trantu

関連する問題