Пользовательский класс User, пароль не сохраняется из формы

Я написал свои собственные AbstractBaseUser и BaseUserManager. Создание пользователей и суперпользователей через терминал работает нормально. Но есть проблема с созданием пользователей через форму. Все поля пользователя сохраняются правильно, кроме поля пароля, которое пустое. Мой models.py:

from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager


class CustomAccountManager(BaseUserManager):

    def create_superuser(self, email, first_name, last_name, password, **other_fields):

        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', True)
        other_fields.setdefault('is_active', True)

        if other_fields.get('is_staff') is not True:
            raise ValueError(
                'Superuser must be assigned to is_staff=True.')
        if other_fields.get('is_superuser') is not True:
            raise ValueError(
                'Superuser must be assigned to is_superuser=True.')

        return self.create_user(email, first_name, last_name, password, **other_fields)

    def create_user(self, email, first_name, last_name, password, **other_fields):

        if not email:
            raise ValueError(_('You must provide an email address'))

        email = self.normalize_email(email)
        user = self.model(email=email, first_name=first_name, last_name=last_name, **other_fields)
        user.set_password(password)
        user.save()
        return user


class MyUser(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField(_('email address'), unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

    objects = CustomAccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    def __str__(self):
        return self.email

И мой forms.py:

from django import forms
from .models import MyUser

class MyUserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)
    
    class Meta:
        model = MyUser
        fields = ['email',
                  'first_name',
                  'last_name']

Думаю, нет необходимости показывать views.py и html файл (полный стандарт + crispy-forms). my form Также, как избавиться от ""? Я бы предпочел "Password", а не "Password". Любая помощь будет принята с благодарностью!

* происходит из crispy-forms. Из документации по crispy-form...

Если вам не нравится использование * (звездочки) для обозначения обязательных полей, у вас есть два варианта:

У звездочек установлен класс asteriskField. Поэтому вы можете скрыть его с помощью CSS правила:

.asteriskField {
    display: none;
}

Переопределить field.html шаблон с пользовательским.

Вернуться на верх