2016-04-04 14 views
2

models.py:ChoiceField:有効な選択肢を選択します。これは、利用可能な選択肢の一つではない

from django.db import models 
from django.contrib.auth.models import User as BaseUser 

CHOICE_GENDER = ((1, 'Male'), (2, 'Female')) 


class Location(models.Model): 
    city = models.CharField(max_length=75) 
    country = models.CharField(max_length=25) 

    def __unicode__(self): 
     return ', '.join([self.city, self.state]) 


class Users(BaseUser): 
    user = models.OneToOneField(BaseUser, on_delete=models.CASCADE) 
    gender = models.IntegerField(choices=CHOICE_GENDER) 
    birth = models.DateField() 
    location = models.ForeignKey(Location) 

    class Meta: 
     ordering = ('user',) 

forms.py:私はタイトルに記載されているエラーを乗り越えるために管理することはできません

from django.contrib.auth.forms import UserCreationForm 
from django import forms 
from .models import Users, Location, CHOICE_GENDER 


class LocationForm(forms.ModelForm): 
    city = forms.CharField(max_length=75) 
    country = forms.CharField(max_length=25) 

    class Meta: 
     model = Location 
     fields = ('city', 'country',) 


class RegistrationForm(UserCreationForm): 
    email = forms.CharField(max_length=75) 
    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 
    gender = forms.ChoiceField(choices=CHOICE_GENDER) 
    birth = forms.DateField() 
    location = LocationForm() 

    class Meta: 
     model = Users 
     fields = ('username', 'email', 'first_name', 'last_name', 'gender', 'birth',) 

    def save(self, commit=True): 
     user = super(RegistrationForm, self).save(commit=False) 
     user.email = self.cleaned_data['email'] 
     user.first_name = self.cleaned_data['first_name'] 
     user.last_name = self.cleaned_data['last_name'] 
     user.gender = self.cleaned_data['gender'] 
     user.birth = self.cleaned_data['birth'] 
     loc = LocationForm(city=self.cleaned_data['city'], country=self.cleaned_data['country']) 
     user.location = loc 
     if commit: 
      user.save() 
     return user 

。私は同じ主題に関する他の質問の提案からすべてを試しましたが、それでも動作しません。誰かがこれで私を助けることができますか?前もって感謝します!

答えて

7

あなたは整数

gender = models.**IntegerField**(choices=CHOICE_GENDER) 

としてデータ型を設定していると文字列に与えられているあなた選択肢は代わりに '1' の

CHOICE_GENDER = (('1', 'Male'), ('2', 'Female')) 

それは1

CHOICE_GENDER = ((1, 'Male'), (2, 'Female')) 
する必要があります