djangoでカスタムユーザーモデルを作り、idの代わりにuuidを使いたかったのでuuidに変更しました。
しかし、いざmigrateしようとしたところ、以下のようなエラーが発生し非常に困っております。
File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\options.py", line 565, in get_field return self.fields_map[field_name] KeyError: 'id' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "manage.py", line 21, in <module> main() File "manage.py", line 17, in main execute_from_command_line(sys.argv) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line utility.execute() File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\base.py", line 364, in execute output = self.handle(*args, **options) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\core\management\commands\migrate.py", line 232, in handle post_migrate_state = executor.migrate( File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\migrations\executor.py", line 245, in apply_migration state = migration.apply(state, schema_editor) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\migrations\migration.py", line 124, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\migrations\operations\fields.py", line 249, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\backends\sqlite3\schema.py", line 137, in alter_field super().alter_field(model, old_field, new_field, strict=strict) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\backends\base\schema.py", line 507, in alter_field new_db_params = new_field.db_parameters(connection=self.connection) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 966, in db_parameters return {"type": self.db_type(connection), "check": self.db_check(connection)} File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 963, in db_type return self.target_field.rel_db_type(connection=connection) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 878, in target_field return self.foreign_related_fields[0] File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 632, in foreign_related_fields return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 619, in related_fields self._related_fields = self.resolve_related_fields() File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\fields\related.py", line 612, in resolve_related_fields else self.remote_field.model._meta.get_field(to_field_name)) File "C:\Users\hiyam\anaconda3\lib\site-packages\django\db\models\options.py", line 567, in get_field raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name)) django.core.exceptions.FieldDoesNotExist: CustomUser has no field named 'id'
ここで書かれているCustomUserは私が作成したmodels.py内のclassだと思われます。
models
class CustomUser(AbstractUser, PermissionsMixin): username_validator = UnicodeUsernameValidator() uuid = models.UUIDField(default=uuid4, primary_key=True, editable=False) username = models.CharField(_("username"), max_length=30, validators=[username_validator], blank=False) user_id = models.CharField(_("user_id"), max_length=30, unique=True) #※このuser_idはtwitterの@から始まるものと同様のものです。 email = models.EmailField(_("email_address"), unique=True) is_staff = models.BooleanField(_("staff status"), default=False) is_superuser = models.BooleanField(_("superuser status"), default=False) date_joined = models.DateTimeField(_("date joined"), default=timezone.now) playfield = models.CharField(_("play field"), max_length=30, blank=True) rank = models.CharField(_("rank"), max_length=30, blank=False) twitter_id = models.CharField(_("twitter id"), max_length=100, blank=True) Youtube_url = models.CharField(_("YouTube CHANNEL"), max_length=100, blank=True) discord_id = models.CharField(_("discord"), max_length=100, blank=True) objects = UserManager() USERNAME_FIELD = "user_id" EMAIL_FIELD = "email" REQUIRED_FIELDS = ['username'] class Meta: verbose_name = _("user") verbose_name_plural = _("users") def clean(self): super().clean() self.email = self.__class__.objects.normalize_email(self.email) def email_user(self, subject, message, from_email=None, **kwargs): send_mail(subject, message, from_email, [self.email], **kwargs) def __str__(self): return self.username class UserManager(BaseUserManager): use_in_migrations = True def _create_user(self, username, email, user_id, password, **extra_fields): if not user_id: raise ValueError('ユーザーidは必須です。') if not email: raise ValueError('Emailは必須です。') email = self.normalize_email(email) username = self.model.normalize_uername(username) user = self.model(username=username, email=email, user_id=user_id, **extra_fields) user.set_password(password) user.save(using=self.db) return user def create_user(self, username, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', False) extra_fields.setdefault('is_superuser', False) return self._create_user(email, password, **extra_fields) def create_superuser(self, username, email, password, **extra_fields): extra_fields.setdefault('isstaff', True) extra_fields.setdefault('is_superuser', True) if extra_fields.get('is_staff') is not True: raise ValueError('スタッフ権限を持っている必要があります。') if extra_fields.get('is_superuser') is not True: raise ValueError('スーパーユーザー権限を持っている必要があります。') return self._create_user(username, email, password, **extra_fields)
CustomUserとUserManagerは以上のようになっています。
似たようなエラーについての対処法は調べて試してみましたが、全く改善いたしませんでした。
有識者の方どうかお助け願います。
まだ回答がついていません
会員登録して回答してみよう