私自身初学者であり質問も初めてのため、必須情報の過不足があるかもしれませんが、下記内容についてご教示頂けますと幸いです。
<エラーについて>
【概要】
DjangoでWebアプリケーションを開発中(ユーザー登録フォームを作成しており、フォームへのCSSの適用方法やパスワードのValidationに取り組んでいる時にDBを何度か削除→作成していたところその過程でスーパーユーザーを作成できなくなってしまいました)。
スーパーユーザー作成時に、下記のエラーが出てしまいスーパーユーザーを作成することができない。
【詳細】
python
1django.db.utils.DataError: (1406, "Data too long for column 'password' at row 1")
<お伺いしたいこと>
上記エラーの解決方法
<現状の理解>
①passwordフィールドにおけるmax_length以上の文字数を入力している可能性
→max_length=20で設定していることから、①によるエラーではない
python
1password = models.CharField(_("password"), max_length=20, unique=True)
②/adminにアクセスは可能(ログインはもちろんできない)
③データベースへのユーザー情報の保存処理も正常に動作(Mysqlで確認するとフォームからのデータの送信と保存も正常に行われている)
<不明点>
models.pyが原因なのか、そのほかの要素が起因してエラーを起こしているのかが分からず、ご教示頂けますと幸いです。
<ソースコード>
models.py
models.py
1from django.db import models 2from django.contrib.auth.models import PermissionsMixin 3from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager 4from django.core.mail import send_mail 5from django.utils import timezone 6from django.contrib.auth.validators import UnicodeUsernameValidator 7from django.utils.translation import gettext_lazy as _ 8 9 10class UserManager(BaseUserManager): 11 use_in_migrations = True 12 13 def _create_user(self, username, email, password, **extra_fields): 14 if not email: 15 raise ValueError('Emailを入力して下さい') 16 email = self.normalize_email(email) 17 username = self.model.normalize_username(username) 18 user = self.model(username=username, email=email, **extra_fields) 19 user.set_password(password) 20 user.save(using=self.db) 21 return user 22 def create_user(self, username, email, password=None, **extra_fields): 23 extra_fields.setdefault('is_staff', False) 24 extra_fields.setdefault('is_superuser', False) 25 return self._create_user(email, password, **extra_fields) 26 27 def create_superuser(self, username, email, password, **extra_fields): 28 extra_fields.setdefault('is_staff', True) 29 extra_fields.setdefault('is_superuser', True) 30 if extra_fields.get('is_staff') is not True: 31 raise ValueError('is_staff=Trueである必要があります。') 32 if extra_fields.get('is_superuser') is not True: 33 raise ValueError('is_superuser=Trueである必要があります。') 34 return self._create_user(username, email, password, **extra_fields) 35 36 37class CustomUser(AbstractBaseUser, PermissionsMixin): 38 username_validator = UnicodeUsernameValidator() 39 40 username = models.CharField(_("username"), max_length=50, validators=[username_validator], blank=True) 41 email = models.EmailField(_("email_address"), unique=True) 42 password = models.CharField(_("password"), max_length=20, unique=True) 43 password1 = models.CharField(_("password1"), max_length=20, unique=True) 44 is_staff = models.BooleanField(_("staff status"), default=False) 45 is_active = models.BooleanField(_("active"), default=True) 46 date_joined = models.DateTimeField(_("date joined"), default=timezone.now) 47 48 objects = UserManager() 49 USERNAME_FIELD = "email" 50 EMAIL_FIELD = "email" 51 REQUIRED_FIELDS = ['username'] 52
forms.py
forms.py
1from django import forms 2from toppage.models import CustomUser 3from django.core.exceptions import ValidationError 4 5 6class SignUpForm(forms.ModelForm): 7 #password = forms.CharField(max_length=20, widget=forms.PasswordInput()) 8 9 class Meta: 10 model = CustomUser 11 fields = ['username', 'email', 'password', 'password1'] 12 #labels = {'username':"ユーザー名",'email':"メールアドレス",'password':"パスワード"} 13 14 15 def clean_password(self): 16 password = self.cleaned_data['password'] 17 password1 = self.data.get('password1') 18 if password != password1: 19 raise ValidationError('パスワードが一致しません。') 20 return password 21
admin.py
admin.py
1from django.contrib import admin 2from django.contrib.auth.admin import UserAdmin 3from django.contrib.auth.forms import UserChangeForm, UserCreationForm 4from django.utils.translation import gettext_lazy as _ 5from .models import CustomUser 6 7""" 8class MyUserChangeForm(UserChangeForm): 9 class Meta: 10 model = CustomUser 11 fields = '__all__' 12 13class MyUserCreationForm(UserCreationForm): 14 class Meta: 15 model = CustomUser 16 fields = ('email','username') 17""" 18 19class MyUserAdmin(UserAdmin): 20 fieldsets = ( 21 (None, {'fields': ('email', 'password', 'password1' 'username')}), 22 (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), 23 (_('Important dates'), {'fields': ('last_login', 'date_joined')}), 24 ) 25 add_fieldsets = ( 26 (None, { 27 'classes': ('wide',), 28 'fields': ('email', 'password', 'password1'), 29 }), 30 ) 31 """ 32 form = MyUserChangeForm 33 add_form = MyUserCreationForm 34 """ 35 list_display = ('email', 'username', 'password', 'is_staff') 36 list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups') 37 search_fields = ('email', 'username') 38 ordering = ('email', 'username',) 39 40admin.site.register(CustomUser, MyUserAdmin)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/26 13:46