0

ユーザーが登録できる登録があり、それを修正するのに苦労しています。

問題は、ユーザーがフォーム全体ではなく単一のフィールドを送信する場合です (例: email )。このエラーが発生します

KeyError at /register/

password
Request Method:     POST
Request URL:    http://127.0.0.1:8000/register/
File "C:\Python26\Lib\site-packages\django\forms\forms.py" in _get_errors
  115.             self.full_clean()
File "C:\Python26\Lib\site-packages\django\forms\forms.py" in full_clean
  271.         self._clean_form()
File "C:\Python26\Lib\site-packages\django\forms\forms.py" in _clean_form
  299.             self.cleaned_data = self.clean()
File "C:\o\17\mysite\pet\forms.py" in clean
  31.       if self.cleaned_data['password'] != self.cleaned_data['password1']:

Exception Type: KeyError at /register/
Exception Value: password

if を使用してこのソリューションを修正しようとしました。ユーザーがユーザー名またはその他の必須フィールドを送信した場合は、フォームを処理します。それ以外の場合は、元のフォームを再表示します。

それでも同じエラーが発生します。

これは私の編集したviews.pyです(ページの下部にあるのは私の元のRegistrationFormです)

def PetRegistration(request):   
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse('world:HappyLand'))

    if request.method =='POST':
        form = UserRegistration(request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        if username:
            email=form.cleaned_data['email']
            if email:
                password=form.cleaned_data['password']
                if password:
                    user = User.objects.create_user(
            username=form.cleaned_data['username'], 
            email=form.cleaned_data['email'], 
            password=form.cleaned_data['password']
            )
                    user.is_active = True
                    user.first_name = form.cleaned_data['name']
                    user.save()

                    person = authenticate(
            username=form.cleaned_data['username'], 
            password=form.cleaned_data['password']
            )

                    Person.objects.create(user_id=user.id, 
                    name=form.cleaned_data['name'],birthday=form.cleaned_data['birthday'])

                    login(request, person)
                    return HttpResponseRedirect(reverse('world:HappyLand'))

return render(request, 'register.html', {'form': UserRegistration()})

このエラーを修正するにはどうすればよいですか。また、ユーザーが入力しなかった他のフィールドに「Error Missing Field , Please Fill this Field」のようなエラー メッセージを表示するにはどうすればよいですか。

def PetRegistration(request):   
if request.user.is_authenticated():
    return HttpResponseRedirect(reverse('world:HappyLand'))

if request.method =='POST':
    form = UserRegistration(request.POST)
    if form.is_valid():
        user = User.objects.create_user(
            username=form.cleaned_data['username'], 
            email=form.cleaned_data['email'], 
            password=form.cleaned_data['password']
            )
        user.is_active = True
        user.first_name = form.cleaned_data['name']
        user.save()

        person = authenticate(
            username=form.cleaned_data['username'], 
            password=form.cleaned_data['password']
            )

        Person.objects.create(user_id=user.id, 
            name=form.cleaned_data['name'],birthday=form.cleaned_data['birthday'])

        login(request, person)
        return HttpResponseRedirect(reverse('world:HappyLand'))

return render(request, 'register.html', {'form': UserRegistration()})

私のforms.py

class UserRegistration(forms.Form):
    username = forms.CharField()
    name = forms.CharField()
    email = forms.EmailField()
    birthday = forms.DateField(widget=extras.SelectDateWidget(years=range(1950, 2012)))

    password = forms.CharField(
        widget=forms.PasswordInput(render_value=False)
        )
    password1 = forms.CharField(
        label=(u'Verify Password'), 
        widget = forms.PasswordInput(render_value=False)
        )

    def clean_username(self):
        username = self.cleaned_data['username']
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError(
            "That user is already taken , please select another ")

    def clean(self):
        if self.cleaned_data['password'] != self.cleaned_data['password1']:
            raise forms.ValidationError("The password does not match ")
        return self.cleaned_data

私のモデル.py

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100, blank=True)
    birthday = models.DateField(blank=True,null=True)
    def __unicode__(self):
        return self.name
4

2 に答える 2

1

私はあなたのforms.pyを変更しました

class UserRegistration(forms.Form):
    username = forms.CharField()
    name = forms.CharField()
    email = forms.EmailField()
    birthday = forms.DateField(widget=extras.SelectDateWidget(years=range(1950, 2012)))
    password = forms.CharField(
        widget=forms.PasswordInput(render_value=False)
        )
    password1 = forms.CharField(
        label=(u'Verify Password'), 
        widget = forms.PasswordInput(render_value=False)
        )

    def clean(self):
        cleaned_data = super(UserRegistration, self).clean()
        username = cleaned_data.get("username")
        password = cleaned_data.get("password")
        password1 = cleaned_data.get("password1")

        #check if username exist  
        user = User.objects.filter(username=username)
        if user:
            raise forms.ValidationError(
                "That user is already taken , please select another ")

        #check password
        if password != password1:
            raise forms.ValidationError(
                "Your current and confirm password do not match.")

        return cleaned_data
于 2013-04-06T03:51:00.703 に答える