1

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

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

4

2 回答 2

7

您已将您的选择设置为字符串,因此它应该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',]
于 2013-10-17T16:27:17.557 回答
1
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)
于 2020-08-08T13:51:29.323 回答