Python Django表单:列表索引必须是整数,而不是str

Python Django表单:列表索引必须是整数,而不是str,python,django,django-forms,Python,Django,Django Forms,有人能解释一下下面的错误,以及它与下面代码的关系吗 我所要做的就是保存一个表单 错误 views.py def registration(request): if request.user.is_authenticated(): return HttpResponseRedirect('/error') if request.method == 'POST': form = RegistrationForm(request.POST)

有人能解释一下下面的错误,以及它与下面代码的关系吗

我所要做的就是保存一个表单

错误

views.py

def registration(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/error')
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(username=form.cleaned_data['username'],email=form.cleaned_data['email'], password=form.changed_data['password'])
            user.save()
            member = User.get_profile()
            member.name = form.cleaned_data['name']
            member.save()
            return HttpResponseRedirect('/profile')
        else:
            return render_to_response('pageRegistration.html', {'form':form},context_instance=RequestContext(request))

    else: 
        form = RegistrationForm 
        context = {'form':form}
        return render_to_response('pageRegistration.html', context, context_instance=RequestContext(request))
models.py

class Member (models.Model):
    user =  models.OneToOneField(User)
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

def createUserCallBacks(sender, instance, **kwargs):
    member, new = Member.objects.get_or_create(user=instance)
post_save.connect(createUserCallBacks, User)
forms.py

class RegistrationForm(ModelForm):
    username = forms.CharField(label=(u'User Name'))
    email = forms.EmailField(label=(u'Email'))
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))
    passwordConfirm = forms.CharField(label=(u'Confirm Password'), widget=forms.PasswordInput(render_value=False))

    class Meta:
        model = Member
        # Don't show user drop down.
        exclude = ('user',)



    def clean(self):
        cleaned_data = super(RegistrationForm, self).clean()
        try:        
            password = cleaned_data['password']
            passwordConfirm = cleaned_data['passwordConfirm']
            if password != passwordConfirm:
                raise forms.ValidationError("Password does not match, try again.")
            return cleaned_data
        except:
            raise forms.ValidationError("Password does not match, try again.")

        username = cleaned_data['username']
        try: User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError("Username already taken, try another.")
更新的def清洁版

  def clean(self):
        try:   
            cleaned_data = super(RegistrationForm, self).clean() 
            password = cleaned_data.get("password")
            passwordConfirm = cleaned_data.get('passwordConfirm')

            if password != passwordConfirm:
                raise forms.ValidationError("Password does not match, try again.")
            return cleaned_data
        except:
            raise forms.ValidationError("Error")

我希望你已经发布了完整的回溯,那么解决你的问题就容易多了


然而,我猜这是因为您在clean函数中随机返回内容。您有一次
返回已清理的\u数据
,但之后您有
返回用户名
。您确实需要从该函数返回已清理的数据,但您应该在最后返回,否则您将永远无法实际到达第二个验证器。在您的视图的第17行中。py它说:

form = RegistrationForm
相反,它应该是

form = RegistrationForm()

您的错误源可能与此不同,但我只想提一下。

异常位置是什么。请提供行号。错误的意思是,您的
已清理的\u数据
已更改的\u数据
对象(或两者)是列表,而不是字典。是的,是已清理的\u数据,是否有帮助我理解此问题的链接?我对上面的新代码非常陌生,但我仍然会遇到同样的错误
form = RegistrationForm()