2017-11-21 11 views
1

自分のユーザモデルとusermanagerモデルを作成しました。次に、スーパーユーザーを作成し、「スーパーユーザーが正常に作成されました」を取得しようとしました。しかし、すべての情報でログインしようとすると、失敗しました。次に、作成中にパスワードを印刷するコード行を追加しました。私は必要なフィールドから1つの必要なフィールドを削除した場合、私が得る、私のコード django - カスタムユーザモデルの作成後にログインできない

  • に応じて変化する

    1. 必須フィールド:結果は私のpassword.Iは、サーバーがカスタムモデルを使用しているかなり確信しているためと一致します期待されている「TypeError: create_superuser() missing 1 required positional argument:」に関するエラー、それは私がデータベース内のユーザーを取得するために.count()メソッドを使用
    2. 正しい方法であると私は1
    を作成した後、私は1と量の増加を見ることができるので、

    ここに私のコードです:

    class UserManager(BaseUserManager): 
        def create_user(self, username,email,password=None): 
         if not email: 
          raise ValueError("Users must have an email address") 
         if not password: 
          raise ValueError("Users must have a password") 
         user_obj = self.model(
          email=self.normalize_email(email) 
         ) 
         user_obj.set_password(password) 
         user_obj.username = username 
         user_obj.save(using=self.db) 
         return user_obj 
    
        def create_superuser(self, username, email, password): 
         print("Super user created, with password" + password) 
         return self.create_user(
          username=username, 
          email=email, 
          password=password, 
         ) 
    
    class User(AbstractBaseUser): 
        username = models.CharField(max_length=255, unique=True) 
        email = models.EmailField(blank=True, unique=True) 
        created_time = models.TimeField(auto_now=True) 
        active = models.BooleanField(default=False) 
    
        USERNAME_FIELD = 'email' 
        REQUIRED_FIELDS = ['username'] 
        objects = UserManager() 
    

    誰かが私に何か考えを与えることができれば本当に感謝しています。完全に失われる。

  • 答えて

    1

    私は、変更すべきだと思う:

    def create_superuser(self, username, email, password): 
    

    へ:

    def create_superuser(self, username, email, password, **extra_fields): 
        .... 
        return self._create_user(username, email, password, **extra_fields) 
    

    **extra_fieldsのパラメータも_create_usercreate_userの機能に必要とされているので、あなたがthis sourceでチェックアウトすることができます。

    def _create_user(self, username, email, password, **extra_fields): 
        .... 
    
    def create_user(self, username, email=None, password=None, **extra_fields): 
        .... 
    
    +0

    にアクセスするためのアカウントのアクセス許可は、そのアレイをextra_fieldsで与えるのだろうか? –

    +0

    と入力フィールドにユーザ名、メールアドレス、パスワードを含めないのはなぜですか?彼らは必要なので? –

    +0

    ここでは、[Pythonでのkwargsの理解](https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python)... [source](https:// github .com/django/django/blob/master/django/contrib/auth/models.py#L134-L161)を使って 'extra_fields'が必要な理由を調べてください。 –

    0

    この状況に対する解決策をtrueにIS_SUPERUSERとis_staffに設定され、プログラムはadminサイトに

    関連する問題