None typeobject в success_url django

У меня есть форма регистрации пользователя, как показано в приведенном ниже коде. Ошибка возникает после того, как форма была отправлена и строка успешно добавлена в базу данных.

views.py

class UserCreateView(CreateView):
    form_class = UserCreateForm
    model = User
    template_name = 'internethq/user_form.html'
    success_url = '/internethq/login'

forms.py

class UserCreateForm(UserCreationForm):
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = [
            'first_name',
            'last_name',
            'username',
            'email',
            'password1',
            'password2'
        ]

    def clean_password1(self):
        exp = re.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$")
        if exp.match(self.cleaned_data['password1']):
            return self.cleaned_data['password1']
        else:
            raise ValidationError('Must contain one uppercase letter, one lowercase letter, one number and one special character.')
    
    def save(self, commit = True):
        user = super().save(commit = False)

        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

Ошибка

Internal Server Error: /internethq/signup/

AttributeError at /internethq/signup/ 'NoneType' object has no attribute '__dict__'  Traceback (most recent call last): 

bit of trimming here...


File "/home/togi/atollaviation/env/lib/python3.6/site-packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, **kwargs) 
File "/home/togi/atollaviation/env/lib/python3.6/site-packages/django/python3.6/site-packages/django/views/generic/edit.py", line 113, in get_success_url url = self.success_url.format(**self.object.__dict__)

Я думал, что success_url выглядит правильно, но есть ли ошибка, которую я упускаю?

Эти коды прекрасно работают на сервере разработки.

Спасибо за помощь.

Вам необходимо вернуть созданный объект из метода Form.save

class UserCreateForm(UserCreationForm):
    
    ...
    
    def save(self, commit = True):
        user = super().save(commit = False)

        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()
        return user

Возвращаемый объект используется во многих местах, включая общие представления обработки форм. Часто это просто возврат созданного объекта, иногда - изменение объекта перед сохранением, как показано ниже

obj = form.save(commit=False)
obj.attr = value
obj.save()
Вернуться на верх