我制作了一个包含以下字段的表单:
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更好的选择吗?
答案 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)