如何在Django中为forms.ChoiceField定义模型?

时间:2013-10-17 16:23:21

标签: django django-models

我制作了一个包含以下字段的表单:

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更好的选择吗?

2 个答案:

答案 0 :(得分:5)

您已将选项设置为字符串,因此它应该是模型中的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',]

答案 1 :(得分:0)

class UserProfile(models.Model):
    SEX_FEMALE = 'F'
    SEX_MALE = 'M'
    SEX_UNSURE = 'U'

    SEX_OPTIONS = (
        (SEX_FEMALE, 'Female'),
        (SEX_MALE, 'Male'),
        (SEX_UNSURE, 'Unsure')
    )
    user = models.ForeignKey('User')
    sex = models.CharField(max_length=1, choices=SEX_OPTIONS)

我确实喜欢这种方式,这样可以更轻松地引用代码中的选项。

UserProfile.objects.filter(sex__exact=UserProfile.SEX_UNSURE)