Python 属性错误&x27;超级';对象没有属性';保存';,基于类的视图中

Python 属性错误&x27;超级';对象没有属性';保存';,基于类的视图中,python,django,Python,Django,我是Django新手,无法使用基于类的视图保存注册表。我在模型中创建了抽象用户,如下所示 models.py class User(AbstractBaseUser): email = models.EmailField(max_length=255, unique=True) full_name = models.CharField(max_length=255, blank=True, null=True) active = models.B

我是Django新手,无法使用基于类的视图保存注册表。我在模型中创建了抽象用户,如下所示

models.py

class User(AbstractBaseUser):
    email       = models.EmailField(max_length=255, unique=True)
    full_name   = models.CharField(max_length=255, blank=True, null=True)
    active      = models.BooleanField(default=True) # can login 
    staff       = models.BooleanField(default=False) # staff user non superuser
    admin       = models.BooleanField(default=False) # superuser 
    timestamp   = models.DateTimeField(auto_now_add=True)
    user_type   = models.CharField(max_length= 120, choices=u_type)
    # confirm     = models.BooleanField(default=False)
    # confirmed_date     = models.DateTimeField(default=False)

    USERNAME_FIELD = 'email' #username
    # USERNAME_FIELD and password are required by default
    REQUIRED_FIELDS = [] #['full_name'] #python manage.py createsuperuser

    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        if self.full_name:
            return self.full_name
        return self.email

    def get_short_name(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_active(self):
        return self.active
我使用表单创建注册表单,如下所示 forms.py

class RegistrationForm(forms.Form):
password1 = forms.CharField(label='password')
password2 = forms.CharField(label='Confirm Password')
user_email = forms.CharField(label='Email')
full_name = forms.CharField(label='Full Name')


class Meta:
    model = User 
    fields = ('full_name', 'email','user_type')


def clean_password2(self):
    password1 = self.cleaned_data.get('password1')
    password2 = self.cleaned_data.get('password2')
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError('password does not match')
    return password2

def save(self, commit=True):
    user = super(RegistrationForm, self).save(commit=False)
    user_mail = self.cleaned_data.get('user_email')
    print(user_mail)
    user.set_password(self.cleaned_data['password1'])
    if(commit):
        user.save()

    return user
这是表单的视图文件

views.py

class RegisterView(FormView):
    form_class = RegistrationForm
    template_name = 'register.html'
    success_url='/login'

    def form_valid(self,form):
        request = self.request
        # f = JobForm(request.POST)
        if request.method == 'POST':
            form = RegistrationForm(request.POST)
            if form.is_valid():
                print(form)
                instance = form.save(commit=False)
        return redirect('/')

我面临的问题是,当我试图保存注册表时,它会给我错误“super”对象没有属性“save”。目前,我正在努力使用基于类的视图保存表单。

您正在显示
RegisterForm
的代码,但在您的视图中似乎使用了
RegistrationForm
。这是正确的还是打字错误?你能显示所有的错误吗?可能是您从错误的位置导入表单,而不是从django(从django导入表单)导入表单(不相关,但…)您没有使用
FormView。form\u valid
正确-调用此方法时,表单已填充并验证。是的,发布问题时出错,我使用的是普通表单而不是模型表单。更正后,现在我没有面临上述错误,但是表单没有保存。表单没有保存还是用户对象?因为您正在传递commit=False,并且有一个if语句在commit=False时不保存用户。我建议阅读ModelForms,因为上面的代码适用于常规表单。