2016-05-14 30 views
1

我有堅持到一些不尋常的問題,即是需要根據不同的用戶類型來創建配置文件 如。超不能有一個配置文件,而其他用戶可以有輪廓後保存信號觸發之前創建超級用戶功能

我有擴展底座用戶經理

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 

,然後用下面的信號I創建配置文件,我自己的用戶模型

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,不明白你的問題因爲你已經在你的問題 – madzohan

+0

上回答了'if not instance.is_admin:'它會進入該塊,即使它對超級用戶 –

+0

當超級用戶被創建時,stance.is_admin是錯誤的..雖然它不是真實的 –

回答

0

配置文件將爲管理員創建的原因是因爲您在create_superuser中使用了create_user。起初一個普通用戶將被保存。這裏的配置文件是爲每個人創建的。兩次這個用戶將被修改爲admin。你應該把這個在您的create_superuser功能:

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