LoginSignup
@coltonOP
Q&A
Closed

AttributeError: 'UserManager' object has no attribute 'normalize_syain_number_s'

Q&A
Closed

解決したいこと

次のエラーが出ていて詰まっています。
原因がわかる方いらっしゃいますでしょうか?

発生している問題・エラー

 File "C:\djangoprojects\scheduleweb\account\models.py", line 28, in _create_user
    syain_number_s = self.normalize_syain_number_s(syain_number_s) ,
AttributeError: 'UserManager' object has no attribute 'normalize_syain_number_s'

models.py

 class UserManager(UserManager):
    
    def _create_user(self, syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password, **extra_fields):
        
        if not syain_number_s:
            raise ValueError("社員番号を入力してください")
            
        if not name_s:
            raise ValueError("名前を入力して下さい。")
            
        if not yakusyoku_s:
            raise ValueError("役職が設定されていません。")
            
        if not syozoku_number_s:
            raise ValueError("所属番号を入力して下さい。")
            
        if not email_s:
            raise ValueError("メールアドレスを入力して下さい。")
        
        user = self.model(
                            syain_number_s = self.normalize_syain_number_s(syain_number_s) ,
                            email_s = self.normalize_email(email_s),
                            yakusyoku_s = self.normalize_yakusyoku_s(yakusyoku_s),
                            syozoku_number_s = self.normalize_syozoku_number_s(syozoku_number_s),
                            name_s = self.normalize_name_s(name_s),
                            **extra_fields
                         )
        user.set_password(password)
        user.save(using=self._db)
        print(self)
        return user

    def create_user(self, syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', False)
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(self, syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password, **extra_fields)

    def create_superuser( syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

        return self._create_user(syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password, **extra_fields)

自分で試したこと

いろいろ試行錯誤して数時間経つので、聞いてみることにしました。

0
1
Answer
        return self._create_user(self, syain_number_s, name_s, yakusyoku_s, syozoku_number_s, email_s, password, **extra_fields)

第1引数の self が余計です。

0
ありがとうございます。selfを消したら新しいエラーがでました。
エラーにそのまま書いてあるとおり、  UserManager クラスに normalize_syain_number_s メソッドが定義されていないせいです。
つまりnormalize_syain_number_s は使えないってことですね。
いろいろとありがとうございました。
また
class UserManager(UserManager):
で親クラス名の指定を間違えており、自分自身を継承することになってしまっています。

もし normalize_syain_number_s メソッドを親クラスで定義してあるなら、↑のミスのせいでエラーになっています。そこを直せばエラーが解消するはずです。
> つまりnormalize_syain_number_s は使えないってことですね。

コメントが入れ違いになりましたが、使えないのではなく元々定義していないか、親クラス名を間違えているせいかのどちらかです。定義するか親クラス名を直せば使えます。
https://qiita.com/startours777/items/706d38e712b0c737a16a

こちらの記事を元に製作を行っているのですが、UseManager(UserManager):
と記述されていたので多分、importしたUseManagerにメソッドが定義されていないんだと気付きました。 

```
× syain_number_s = self.normalize_syain_number_s(syain_number_s)

○ syain_number_s = syain_number_s
```

これでうまくいきました。
解決してよかったです。

全体のソースを読んで気づきましたが、
>自分自身を継承することになってしまっています。
この説明は間違いでした。
django.contrib.auth.models.UserManager を継承して、同名だが別物の UserManager クラスを作っています。つまり親クラス名はこれで合っていました。

ところで、
○ syain_number_s = syain_number_s
これは syain_number_s 変数に自身の値を代入し直す無意味な操作なので、この行ごと消せます。
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login