小部件中的空标签选择

时间:2013-03-05 12:12:33

标签: django

在表单中,我们可以使用empty_label。我使用widget Select,我的选择来自数据库,是否可以在empty_label使用?在模型中我有:

position = forms.IntegerField(label=position_label, required=False, 
    widget=forms.Select(choices=Position.objects.all().values_list('id', 'position'),
    attrs={'class':'main', 'title': position_label},
    ), empty_label="(Empty)")

但错误是:

TypeError: __init__() got an unexpected keyword argument 'empty_label'

如何将标签设置为“空”?感谢。

3 个答案:

答案 0 :(得分:6)

实现empty_label有两种方法:

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['field_name'].empty_label = "(Select here)"
        self.fields['field_name'].widget.attrs['class'] = 'main'
        self.fields['field_name'].queryset = Position.objects.all().values_list('id', 'position')

//OR   

class MyForm(forms.ModelForm):
    field_name = forms.ModelChoiceField(
        queryset=Position.objects.all().values_list('id', 'position'), 
        empty_label="(Select here)"
        )

    class Meta:
        model = MyModel

答案 1 :(得分:3)

empty_label是字段的属性,而不是小部件。您已为label设置了position

答案 2 :(得分:0)

来自Django文档https://docs.djangoproject.com/en/1.10/ref/forms/widgets/#django.forms.SelectDateWidget

如果不需要 DateField SelectDateWidget 将在列表顶部显示为空(默认情况下为---)。您可以使用 empty_label 属性更改此标签的文字。 empty_label 可以是字符串,列表或元组。使用字符串时,所有选择框都将使用此标签进行空选。如果 empty_label 是3个字符串元素的列表或元组,则选择框将具有自己的自定义标签。标签应按此顺序排列('year_label','month_label','day_label')。