5676
5676

Reputation: 33

Django: Can't set up custom django User model

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

Answers (1)

ash
ash

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

Related Questions