Python Django ModelForm小部件和标签
当我有一个常规的ModelForm字段时,设置它的小部件和/或标签将如下所示:Python Django ModelForm小部件和标签,python,django,modelform,Python,Django,Modelform,当我有一个常规的ModelForm字段时,设置它的小部件和/或标签将如下所示: class MyModelForm(models.ModelForm): class Meta: model = MyModel fields = ['field_x', 'field_y'] widgets = { 'field_x': Forms.TextInput(attrs={'class': 'myclass', 'readon
class MyModelForm(models.ModelForm):
class Meta:
model = MyModel
fields = ['field_x', 'field_y']
widgets = {
'field_x': Forms.TextInput(attrs={'class': 'myclass', 'readonly': 'readonly'}),
'field_y': Forms.Select(attrs{'class': 'myclass'}),
}
labels = {
'field_x': 'Input your X value here',
'field_y': 'Select your Y value here',
}
到目前为止一切正常。但当涉及到更“复杂”的字段时,小部件将忽略其属性。。。这让我恶心
例如:
class MyComplicatedModelForm(forms.ModelForm):
field_z = forms.ModelChoiceField(queryset=AnyClass.objects.all(), empty_label=None, required=True, to_field_name='id')
class Meta:
model = MyComplicatedModel
fields = ['field_z']
widgets = {
'field_z': Forms.ModelChoiceField(attrs={'class': 'myclass'}),
}
labels = {
'field_z': 'Select your Z value here',
}
它可以正常工作,但会忽略它的widgets={}
和labels={}
,它将有一个默认类,标签将是字段的名称(“field_z”)。
当窗口小部件和标签不是最后一个这样的“常规”字段时,如何管理它们?
窗口小部件和标签用于覆盖从模型自动创建的字段的相关属性。但是在字段_z
的情况下,它不是自动创建的;您专门提供了一个定义。因此,您需要直接在该定义中设置相关属性:
class MyComplicatedModelForm(forms.ModelForm):
field_z = forms.ModelChoiceField(
queryset=AnyClass.objects.all(),
empty_label=None,
required=True,
to_field_name='id',
label='Select your Z value here',
widget=forms.SelectMultiple(attrs={'class': 'myclass'})
)
class Meta:
model = MyComplicatedModel
fields = ['field_z']
请注意,ModelChoiceField是一个字段,而不是一个小部件,因此无论如何都不能在小部件中工作-相关的小部件是。在第二个代码片段中是那些字段
/小部件
/标签
不在元类中?@DanielRoseman很抱歉键入我的示例时出错。我编辑并修复了它。如果我不能使用小部件,如何处理字段外观?您在小部件小部件中使用的是ModelChoiceField。这是行不通的。改用类似selectMultiple的小部件