2016-04-04 16 views
2

models.py:ChoiceField: Geçerli bir seçim yapın. Yani sunulan seçenekler arasında yer değildir

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: Ben başlığında açıklanan hata geçmiş olsun yönetemez

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 

. Aynı konuyla ilgili diğer sorulardaki önerilerinden her şeyi denedim ama hala çalışmıyor. Birisi bana yardım edebilir mi? Şimdiden teşekkürler!

cevap

7

Sen Tamsayı

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

olarak veri türünü belirledik ve dize verilmiştir sizin seçimler yerine '1' merkezinin

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

o 1

CHOICE_GENDER = ((1, 'Male'), (2, 'Female')) 
olmalıdır
İlgili konular