Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:Form对象没有任何属性\u data-save()方法_Python_Django_Django Forms - Fatal编程技术网

Python Django:Form对象没有任何属性\u data-save()方法

Python Django:Form对象没有任何属性\u data-save()方法,python,django,django-forms,Python,Django,Django Forms,好吧,我只是偶然地解决了这个问题,我只是想知道发生了什么 我有自己的用户注册表单BaseCreationForm,它扩展了ModelForm并使用UserProfile作为其模型。所有的验证方法都很好,但是save方法让我很伤心。每当我试图创建一个用户(概要文件是在视图中创建的,我可能会重构它),Django就会告诉我“BaseCreationForm对象没有属性数据” 但是,在save()方法中创建用户之前,出于沮丧和想法不足,我添加了一个简单的“print self”语句,问题消失了,用户创

好吧,我只是偶然地解决了这个问题,我只是想知道发生了什么

我有自己的用户注册表单BaseCreationForm,它扩展了ModelForm并使用UserProfile作为其模型。所有的验证方法都很好,但是save方法让我很伤心。每当我试图创建一个用户(概要文件是在视图中创建的,我可能会重构它),Django就会告诉我“BaseCreationForm对象没有属性数据”

但是,在save()方法中创建用户之前,出于沮丧和想法不足,我添加了一个简单的“print self”语句,问题消失了,用户创建正常。下面是两个有效的clean()方法,save()方法和视图中调用clean()和save()方法的代码段

clean()方法正常工作

#example clean methods, both work beautifully
def clean_email(self):
    email = self.cleaned_data["email"]
    if not email:
        raise forms.ValidationError(self.error_messages['no_email'])

    try:
        User.objects.get(email=email)
    except User.DoesNotExist:
        return email
    raise forms.ValidationError(self.error_messages['duplicate_email'])

def clean_password2(self):
    # Check that the two password entries match
    password1 = self.cleaned_data.get("password1")
    password2 = self.cleaned_data.get("password2")
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError(
            self.error_messages['password_mismatch'])
    return password2
save()方法:

以及视图(遗漏了一些内容):


您不应该在
form\u valid
方法中重新实例化表单。当表单已经有效并且表单确实被传递到方法中时,将调用该函数。你应该用它来代替


(请注意,实际错误是因为您根本没有调用
form.is\u valid()
,但正如我上面所说的,您不应该这样做,因为视图已经在这样做了。)

您不应该在
form\u valid
方法中重新实例化表单。当表单已经有效并且表单确实被传递到方法中时,将调用该函数。你应该用它来代替


(请注意,实际错误是因为您根本没有调用
form.is\u valid()
,但正如我上面所说的,您不应该这样做,因为视图已经在这样做了。)

哦,我明白了,谢谢。原因是我上传了一个文件,之前在上传时遇到了麻烦,一些消息来源说我应该确保它包括(self.request.FILES)。但是这个错误一定是在别的地方,因为现在我刚刚把它注释出来,它仍然有效。哦,我明白了,谢谢。原因是我上传了一个文件,之前在上传时遇到了麻烦,一些消息来源说我应该确保它包括(self.request.FILES)。但是这个错误一定是在别的地方,因为现在我刚刚把它注释掉了,它仍然有效。
 #save method requiring wizardry
 def save(self, commit=True):
    #This line makes it work. When commented, the error appears
    print self
    ###  
    user = User.objects.create_user(
        username=self.cleaned_data.get("username"),
        first_name=self.cleaned_data["first_name"],
        last_name=self.cleaned_data["last_name"],
        email=self.cleaned_data["email"],
        )
    user.set_password(self.cleaned_data["password1"])
    if commit:
        user.save()
    return user
class RegistrationView(FormView):
    template_name = 'register.html'
    form_class = BaseCreationForm
    model = UserProfile
    success_url = '/account/login/'

    def form_valid(self, form):
        form                    = BaseCreationForm(self.request.POST,
                                                  self.request.FILES)
        user                    = form.save()
        profile                 = user.get_profile()
        profile.user_type       = form.cleaned_data['user_type']
        profile.title           = form.cleaned_data['title']
        profile.company_name    = form.cleaned_data['company_name']
        .
        .
        .
        profile.save()
        return super(RegistrationView, self).form_valid(form)