Reputation: 33
I want to set up my own django User model because I need additional fields, but I am getting the error. I read a lot of posts but I didn't find solution. What is the problem?
Code models.py:
class User(AbstractBaseUser):
username = models.CharField(max_length=30, unique=True),
email = models.EmailField(max_length=50, unique=True),
city = models.TextField(max_length=30, blank=True),
friends = models.ManyToManyField("Account", blank=True)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['username']
Code admin.py
admin.site.register(User)
Code admin settings:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users.apps.UsersConfig'
]
AUTH_USER_MODEL = 'users.User'
Error:
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\options.py", line 608, in get_field
return self.fields_map[field_name]
KeyError: 'username'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner
self.run()
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\commands\runserver.py", line 124, in inner_run
self.check(display_num_errors=True)
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\base.py", line 438, in check
all_issues = checks.run_checks(
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\checks\registry.py", line 77, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\contrib\auth\checks.py", line 55, in check_user_model
if not cls._meta.get_field(cls.USERNAME_FIELD).unique and not any(
File "C:\Users\rogal\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\options.py", line 610, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: User has no field named 'username'
Upvotes: 0
Views: 393
Reputation: 1055
Why you are mentioning REQUIRED_Fields
USERNAME_FIELD = 'username'
When you don't give arguments as Null = true or blank = true as default they become required ones. So Don't Mention them Go like this:
class User(AbstractBaseUser):
username = models.CharField(max_length=30, unique=True),
email = models.EmailField(max_length=50, unique=True),
city = models.TextField(max_length=30, blank=True),
friends = models.ManyToManyField("Account", blank=True)
And define Your Admin.py
from .models import User
from django.contrib import admin
class UserAdmin(admin.ModelAdmin):
list_display = ["id", "username"]
admin.site.register(User, UserAdmin)
Upvotes: 1