Пользовательские формы Django Allauth не сохраняются в базе данных

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

Я пробовал следующие решения здесь и здесь безрезультатно.

forms.py:

from allauth.account.forms import SignupForm
from django import forms
from .models import User
from django.forms.widgets import NumberInput
import datetime
 
 
class CustomSignupForm(SignupForm):
    age = forms.CharField(max_length=30, label='Age')
    date_of_birth = forms.DateField(widget = NumberInput(attrs={'type':'date'}))

    def save(self, request):
        user = super(CustomSignupForm, self).save(request)

        user.age = self.cleaned_data['age']
        user.date_joined = datetime.datetime.now()
        user.date_of_birth = self.cleaned_data['date_of_birth']
        
        user.save()
        return user

models.py:

from django.db import models

# Create your models here.
class User(models.Model):
    age = models.PositiveSmallIntegerField()
    date_of_birth = models.DateField()
    date_joined = models.DateField()
    

    def __str__(self):
        return self.name

settings.py:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED=True
ACCOUNT_EMAIL_VERIFICATION='mandatory'
ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTS = False
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 3

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
LOGIN_REDIRECT_URL = '/'

ACCOUNT_FORMS = {
'signup': 'core.forms.CustomSignupForm',
}

Где-то упоминалось о наличии: AUTH_USER_MODELS = 'myproject.User' однако это вызывает ошибку о том, что у пользователя нет обязательных полей.

Я не понимаю, где я ошибаюсь. Конечно, мне не нужно создавать другой объект пользователя и связывать его с тем же аутентифицированным пользователем? Должен быть более простой способ.

Любая помощь будет принята с благодарностью, спасибо.

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