在表单中,我们可以使用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'
如何将标签设置为“空”?感谢。
答案 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')。