2013-10-17 2 views
0

나는 같은 필드를 포함하는 폼을 만들었습니다 :Django에서 forms.ChoiceField의 모델을 정의하는 이유는 무엇입니까?

sex = forms.ChoiceField(choices= SEX) 

장소 : 이제

SEX = (
    ('F','Female'), 
    ('M','Male'), 
    ('U','Unsure'), 
    ) 

내가 섹스 필드 모델을 정의하는 방법을 가장 궁금하네요?

class UserProfile(models.Model): 
    user = models.ForeignKey('User') 
    sex = models.CharField(max_length=10) 

그러나 CharField보다 더 나은 옵션이 아니다 : 나는 그것이 같이 할 수 있다는 것을 알고?

+1

모델 필드는 선택 값의 유형을 나타내야합니다. 당신의 선택은''F ','M ','U '의 문자이므로, 여러분의 모델은'sex = models.CharField (max_length = 1)'을 가져야합니다. –

+0

글쎄, 나는이 시나리오에서 CharField보다 더 나은 옵션이있을 것이라고 생각했다. (더 나은, DB를 쿼리 측면에서.) – supermario

+0

문자 필드의 문제는 무엇입니까? –

답변

2

선택 사항을 문자열로 설정 했으므로 모델에 CharField(max_length=1, choices=SEX)이어야합니다. 그런 다음 모든 논리를 별도의 양식으로 반복하는 대신 ModelForm을 사용할 수 있습니다. 예 :

# models.py 
class MyModel(models.Model): 
    SEX_CHOICES = (
     ('F', 'Female',), 
     ('M', 'Male',), 
     ('U', 'Unsure',), 
    ) 
    sex = models.CharField(
     max_length=1, 
     choices=SEX_CHOICES, 
    ) 

# forms.py 
class MyForm(forms.MyForm): 
    class Meta: 
     model = MyModel 
     fields = ['sex',] 
+0

charfields는 필수'max_length' 속성을 가지고 있습니다. –

+0

맞습니다. 감사합니다. –

+0

사실, 내가 model.py 페이지 안에 SEX touple을 넣고 'django.forms import ModelForm'에서 가져 와서 양식에 사용할 수있는 SEX 옵션을 만들고 중복을 피하도록해야합니까? – supermario

관련 문제