Django как указать, в какую таблицу сохранять зарегистрированных пользователей?

делаю свой проект на Django, создала собственную таблицу для того чтобы хранить информацию о пользователях. но я не понимаю, как мне ее указать (и надо ли указывать), чтобы пользователи после успешной регистрации сохранялись в моей таблице? также хочу сказать, что создавала пользователя через админку, и он сохранился в нужной мне таблице. однако когда я регистрируюсь на своем сайте через форму регистрации, то никаких обновлений в таблице не происходит

модель User:

class User(models.Model):
    """Класс, описывающий пользователя"""
    first_name = models.CharField(max_length=20, verbose_name="Имя пользователя")
    last_name = models.CharField(max_length=20, verbose_name="Фамилия пользователя")
    email = models.EmailField(
        max_length=254, verbose_name="Электронная почта пользователя"
    )

    # favourites = add to favourites

    def validate_length(
            value, length=11
    ):  # Display a message when creating a classified
        if len(str(value)) != length:
            raise ValidationError("%s is not the correct length" % value)

    phone_number = models.CharField(
        max_length=11,
        validators=[validate_length],
        verbose_name="Номер телефона",
        default=None,
    )  # Display contact phone number

    def __str__(self):
        return str(self.first_name) + " " + str(self.last_name)

    class Meta:
        verbose_name = "Пользователь"
        verbose_name_plural = "Пользователи"

форма регистрации:

class RegisterForm(UserCreationForm):
    first_name = forms.CharField(
        max_length=100,
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Имя'}),
    )
    last_name = forms.CharField(
        max_length=100,
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Фамилия'}),
    )
    email = forms.EmailField(
        max_length=100,
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Email'}),
    )
    phone_number = forms.CharField(
        max_length=100,
        required=True,
        widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Номер телефона'}),
    )
    password = forms.CharField(
        required=True,
        widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Пароль'}),
    )
    password2 = forms.CharField(
        required=True,
        widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Подтверждение пароля'}),
    )

    class Meta:
        model = User

        fields = [
            'first_name', 'last_name', 'email', 'phone_number', 'password1', 'password2'
        ]

класс представления для регистрации:

class RegistrationUserView(FormView):
    form_class = RegisterForm
    success_url = 'login/'
    template_name = 'apartment_app/registration.html'

    def form_valid(self, form):
        form.save()
        return super(RegistrationUserView, self).form_valid(form)

    def form_invalid(self, form):
        return super(RegistrationUserView, self).form_invalid(form)

Вы пытаетесь создать пользователя не наследуясь при этом от него. Указываете ли вы django AUTH_USER_MODEL? Если нет то укажите в настройках проекта это:

settings.py

AUTH_USER_MODEL = 'users.User' # users - название приложения

Так же вы используете UserCreationForm, при этом вы ненаследуетесь или не расширяете абстрактную модель.

Используйте AbstractUser в своих моделях:

models.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    ...
    fields
    ...

Так же, если не ошибаюсь, нельзя так переопределять поля по умолчанию в UserCreationForm, в место этого лучше использовать __init__ метод:

class SignUpForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['username'].widget.attrs.update(
      {
        'type':'text',
        'id':"username",
        "name":"username",
        "class":"form-control,
        "placeholder":"Логин"
                }
    )
        self.fields['password1'].widget.attrs.update(
      {
        "type":"password",
        "name":"password1",
        "id":"password1",
        "class":"form-control",
        "placeholder":"Пароль",
        }
    )
      self.fields['password2'].widget.attrs.update(
      {
        "type":"password",
        "name":"password2",
        "id":"password2",
        "class":"form-control",
        "placeholder":"Пароль",
        }
    )
class Meta:
    model = User
    fields = ['username', 'password1','password2', ]

Должно решить вашу проблему.

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