Are you sure you want to delete the question?
Leaving a resolved question undeleted may help others!
Q&A
Closed
AttributeError: 'UserManager' object has no attribute 'normalize_syain_number_s'
解決したいこと
次のエラーが出ていて詰まっています。
原因がわかる方いらっしゃいますでしょうか?
発生している問題・エラー
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 メソッドを親クラスで定義してあるなら、↑のミスのせいでエラーになっています。そこを直せばエラーが解消するはずです。
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
```
これでうまくいきました。
こちらの記事を元に製作を行っているのですが、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 変数に自身の値を代入し直す無意味な操作なので、この行ごと消せます。
全体のソースを読んで気づきましたが、
>自分自身を継承することになってしまっています。
この説明は間違いでした。
django.contrib.auth.models.UserManager を継承して、同名だが別物の UserManager クラスを作っています。つまり親クラス名はこれで合っていました。
ところで、
○ syain_number_s = syain_number_s
これは syain_number_s 変数に自身の値を代入し直す無意味な操作なので、この行ごと消せます。