Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 ModelForm:在许多表单字段中插入空白选项 >为了确保用户从下拉菜单中选择一个有效值(而不是不知不觉地把第一个选项放在列表中而不把它改为正确的值),我在许多需要的表单字段中插入了空白选择字段。_Django_Django Forms_Django Templates - Fatal编程技术网

Django ModelForm:在许多表单字段中插入空白选项 >为了确保用户从下拉菜单中选择一个有效值(而不是不知不觉地把第一个选项放在列表中而不把它改为正确的值),我在许多需要的表单字段中插入了空白选择字段。

Django ModelForm:在许多表单字段中插入空白选项 >为了确保用户从下拉菜单中选择一个有效值(而不是不知不觉地把第一个选项放在列表中而不把它改为正确的值),我在许多需要的表单字段中插入了空白选择字段。,django,django-forms,django-templates,Django,Django Forms,Django Templates,型号.py class MyModel(models.Model): gender = models.CharField(max_length=1, null=True, blank=False, choices=GENDER_CHOICES, default='') Original forms.py(显式定义表单字段。这很有效。) 现在,因为我正在对许多字段执行此操作,所以我尝试在forms.py中修改我以前的代码: 修订的forms.py(在\uuuu init\uuuu()中设

型号.py

class MyModel(models.Model):
    gender = models.CharField(max_length=1, null=True, blank=False, choices=GENDER_CHOICES, default='')
Original forms.py(显式定义表单字段。这很有效。)

现在,因为我正在对许多字段执行此操作,所以我尝试在forms.py中修改我以前的代码:

修订的forms.py(在
\uuuu init\uuuu()
中设置选项无效)。

在这种情况下,我不会将破折号作为下拉列表中的第一选择

我试图通过在模板中使用
pdb
在表单字段输出之前检查表单字段来研究这个问题。在这两种情况下,调试器都将
元素.field.choices
显示为
(u'',u'-----------'),('f','Female'),…]
。但是,输出表单字段的代码仅在原始代码中插入破折号,而不在修订后的代码中插入破折号

我尝试单步遍历呈现表单字段的Django代码,以确定它是否使用了我不知道的
.choices
之外的其他字段,但我从未进入代码的正确部分


有没有办法做到这一点?虽然第一种方法效果很好,但修改后的代码更加枯燥。。。要是我能让它工作就好了!谢谢

您不只是使用内置的有什么原因吗?@solarismoke,因为由于模型的编写方式,默认情况下不会显示空选项。因此需要强制输入空选项。是否有理由不使用内置选项?@solarismoke,因为由于模型的编写方式,默认情况下不会显示空选项。因此,有必要强行做出空洞的选择。
from django.db.models.fields import BLANK_CHOICE_DASH
class MyForm(forms.ModelForm):
    gender = forms.TypedChoiceField(required=True, choices=BLANK_CHOICE_DASH+MyModel._meta.get_field('gender').choices)
    class Meta:
        model = MyModel
        fields = '__all__'
class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        for type in ('gender', ...):
            self.fields[type].choices.insert(0, (u'',u'---------' ))
    # Not needed anymore.. replaced by code in __init__()
    # gender = forms.TypedChoiceField(required=True, choices=BLANK_CHOICE_DASH+MyModel._meta.get_field('gender').choices)
    class Meta:
        model = MyModel
        fields = '__all__'