Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中forms.ChoiceField的模型定义是什么?_Django_Django Models - Fatal编程技术网

Django中forms.ChoiceField的模型定义是什么?

Django中forms.ChoiceField的模型定义是什么?,django,django-models,Django,Django Models,我制作了一个包含如下字段的表单: sex = forms.ChoiceField(choices= SEX) 其中: SEX = ( ('F','Female'), ('M','Male'), ('U','Unsure'), ) 现在我想知道如何最好地定义模型中的性别字段?我知道可以这样做: class UserProfile(models.Model): user = models.ForeignKey('User') sex = model

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

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)

但难道没有比查菲尔德更好的选择吗

您已经将选择设置为字符串,因此它应该是模型中的
字符域(max_length=1,choices=SEX)
。然后,您可以使用,而不是以单独的形式重复所有逻辑。例如:

# 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',]

您已经将选择设置为字符串,因此它应该是模型中的
CharField(max_length=1,choices=SEX)
。然后,您可以使用,而不是以单独的形式重复所有逻辑。例如:

# 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',]
我更喜欢这种方式,它更容易引用代码中的选项

UserProfile.objects.filter(sex__exact=UserProfile.SEX_UNSURE)
我更喜欢这种方式,它更容易引用代码中的选项

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

模型字段应表示选择值的类型;在您的案例中,您的选择是字符
'F',M',U'
,因此您的模型应该具有
性别=模型。CharField(max_length=1)
-这就是您要问的问题吗?嗯,我认为在这个场景中可能有比CharField更好的选择。(在DB查询方面更好)字符字段有什么问题?模型字段应该表示选择值的类型;在您的案例中,您的选择是字符
'F',M',U'
,因此您的模型应该具有
性别=模型。CharField(max_length=1)
-这就是您要问的问题吗?嗯,我认为在这个场景中可能有比CharField更好的选择。(在DB查询方面更好。)字符字段有什么问题吗?那么实际上,我应该在models.py页面中放入SEX-touple并在那里导入“from django.forms import ModelForm”,以使表单也可以使用SEX选项并避免冗余吗?那么实际上,我是否应该在models.py页面中放置SEX-touple并在那里导入“from django.forms import ModelForm”,以使表单也可以使用SEX选项并避免冗余?您重复了两次。我在编辑建议中犯了一个错误:(难以置信。谢谢,我删除了重复的文本。自从python3.8以来,只在声明
SEX\u选项
的内部声明变量可能更方便,比如
SEX\u选项=((SEX\u-FEMALE:=“F”,“FEMALE”),…)
。你重复了两次女性。我在我的编辑建议中犯了一个错误:(难以置信。谢谢,我删除了重复的文本。自python3.8以来,在声明
SEX\u选项的内部声明变量可能更方便,比如
SEX\u选项=((SEX\u-female:=“F”,“female”),…)