MicroPyramid / Django-CRM

Open Source CRM based on Django
https://bottlecrm.io
MIT License
1.93k stars 882 forks source link

Can't create superuser #508

Open vikramiiitm opened 11 months ago

vikramiiitm commented 11 months ago

(venv) PS C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM> python .\manage.py createsuperuser Traceback (most recent call last): File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\db\models\options.py", line 681, 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 ".\manage.py", line 24, in execute_from_command_line(sys.argv) File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\core\management__init__.py", line 442, in execute_from_command_line utility.execute() File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\core\management__init__.py", line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\core\management\base.py", line 404, in run_from_argv parser = self.create_parser(argv[0], argv[1]) File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\core\management\base.py", line 367, in create_parser self.add_arguments(parser) File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 61, in add_arguments field = self.UserModel._meta.get_field(field_name) File "C:\Users\Vikram Chowdhury\Desktop\wagtail_crm_react\Django-CRM\venv\lib\site-packages\django\db\models\options.py", line 683, in get_field raise FieldDoesNotExist( django.core.exceptions.FieldDoesNotExist: User has no field named 'username'

shaikhmudassir commented 11 months ago

I noticed that django.contrib.admin is not listed in INSTALLED_APPS. @ashwin31, don't we need a superuser?

atlasloewenherz commented 10 months ago

this is not a solution, but i was able to create the user following these steps:

1) create a CustomUserManager to take over the creation of superusers:

class CustomUserManager(BaseUserManager):

    def create_superuser(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError("User must have an email")
        if not password:
            raise ValueError("User must have a password")

        user = self.model(
            email=self.normalize_email(email)
        )

        user.set_password(password)
        user.is_superuser = True
        user.staff = True
        user.active = True
        user.save(using=self._db)
        return user

2) replace the legacy user manager in the User class in common.models.User

from

class User(AbstractBaseUser, PermissionsMixin):
    id = models.UUIDField(
        default=uuid.uuid4, unique=True, editable=False, db_index=True, primary_key=True
    )
    email = models.EmailField(_("email address"), blank=True, unique=True)
    profile_pic = models.CharField(
        max_length=1000, null=True, blank=True
    )
    activation_key = models.CharField(max_length=150, null=True, blank=True)
    key_expires = models.DateTimeField(null=True, blank=True)
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = "email"
    # REQUIRED_FIELDS = ["username"]

    objects = UserManager()

    class Meta:
        verbose_name = "User"
        verbose_name_plural = "Users"
        db_table = "users"
        ordering = ("-is_active",)

    def __str__(self):
        return self.email

to:

class User(AbstractBaseUser, PermissionsMixin):
    id = models.UUIDField(
        default=uuid.uuid4, unique=True, editable=False, db_index=True, primary_key=True
    )
    email = models.EmailField(_("email address"), blank=True, unique=True)
    profile_pic = models.CharField(
        max_length=1000, null=True, blank=True
    )
    activation_key = models.CharField(max_length=150, null=True, blank=True)
    key_expires = models.DateTimeField(null=True, blank=True)
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = "email"
    # REQUIRED_FIELDS = ["username"]

    objects = CustomUserManager()

    class Meta:
        verbose_name = "User"
        verbose_name_plural = "Users"
        db_table = "users"
        ordering = ("-is_active",)

    def __str__(self):
        return self.email

this way you can create the superuser.

@ashwin31: if the above counts as a solution i'll be happy to provide a clean pull request

amitv9493 commented 9 months ago

I tried this. But I am still not able to login to the wagitail admin panel.

tlaraine commented 9 months ago

thank you, it helped, it’s strange that they didn’t make these changes as a fix