Вы можете создать подкласс UserCreationForm в Django и переопределить его метод сохранения для входа в систему, когда commit = True.
forms.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
class CustomUserCreationForm(UserCreationForm):
"""
A ModelForm for creating a User and logging
them in after commiting a save of the form.
"""
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
class Meta(UserCreationForm.Meta):
pass
def save(self, commit=True):
user = super().save(commit=commit)
if commit:
auth_user = authenticate(
username=self.cleaned_data['username'],
password=self.cleaned_data['password1']
)
login(self.request, auth_user)
return user
Вам просто нужно убедиться, что вы передалиобъект запроса, когда вы создаете экземпляр формы.Вы можете сделать это путем переопределения метода get_form_kwargs представления.
views.py
def get_form_kwargs(self):
form_kwargs = super().get_form_kwargs(self)
form_kwargs['request'] = self.request
return form_kwargs
Или убедитесь, что при создании экземпляра класса form_class вы делаете CustomUserCreationForm(data=request.POST, request=self.request)
.