当用户想要更新他的信息时如何将数据拉入表单? Django的

时间:2016-03-19 07:47:09

标签: python django django-forms django-views

我构建了一个功能,用户可以点击“更新个人资料”来编辑他们的名字,姓氏,用户名..等等。它工作正常。但是,我希望更新表单填充之前输入的数据,而不是空白字段。

这是我的表格:

class UpdateProfileForm(forms.ModelForm):
    username = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)

    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name')

    def clean_email(self):
        username = self.cleaned_data.get('username')
        email = self.cleaned_data.get('email')

        if email and User.objects.filter(email=email).exclude(username=username).count():
            raise forms.ValidationError('This email address is already in use. Please supply a different email address.')
        return email

    def save(self, commit=True):
        user = super(UpdateProfileForm, self).save(commit=False)
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

这是观点:

def updateprofile(request):
    args = {}

    if request.method == 'POST':
        update_profile_form = UpdateProfileForm(request.POST, instance=request.user)

        if update_profile_form.is_valid():
            update_profile_form.save()
            return HttpResponseRedirect(reverse('index'))
    else:
        update_profile_form = UpdateProfileForm()

    args['update_profile_form'] = update_profile_form
    return render(request, 'updateprofile.html', args)

这一点也很重要,因为如果他们将更新的信息输入空白字段,他们必须输入所有这些信息,但如果填写完毕,那么他们就可以编辑他们想要的内容并提交。谢谢。

1 个答案:

答案 0 :(得分:2)

您在第二次UpdateProfileForm()来电中忘记了实例参数。它应该是:

else:
    update_profile_form = UpdateProfileFrom(instance=request.user)