Я реализую пользовательскую модель, расширяющую AbstractBaseUser. Вот мой файл account / models.py.
from django.db import models
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser
)
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email)
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
"""
Creates and saves a superuser with the given email, password.
"""
user = self.create_user(
email,
password=password
)
user.paid = True
user.is_superuser = True
user.is_admin = True
user.is_staff = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser):
email = models.EmailField(max_length=60, unique=True)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
paid = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
list_filter = () # Con
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ("paid",)
objects = MyUserManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return self.is_admin
Но я получаю ошибку при создании суперпользователя с помощью команды python manage.py runserver
Это то, что я получил от терминала:
Email: i@j.com
Paid: True
Password:
Password (again):
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 "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 61, in execute
return super().execute(*args, **options)
File "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/home/rhidwan/Desktop/shotave/venv/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 156, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() got an unexpected keyword argument 'paid'
Ранее это работало нормально около 4 дней назад, когда я последний раз проверял. Но это перестало работать с сегодняшнего дня. Не уверен, в чем проблема. Я не делал никаких обновлений пакетов. И не могу вспомнить, если я удалил какой-либо код.
Заранее спасибо
Редактировать Вот как я решил проблему. Я удалил все свои миграции, а затем изменил платное поле на is_paid. А затем снова примените миграцию, и она работает как шарм.
Спасибо всем, кто много помог, чтобы решить проблему.