2013-10-17 69 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有更好的選擇。 (更好的是,根據數據庫查詢。) – 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

所以實際上,我是否應該在models.py頁面中放入SEX touple,並從那裏導入'from django.forms import ModelForm',以使SEX選項也可用於表單並避免冗餘? – supermario