全部,
我设法让 MultiValueField 和 MultiValueWidget 工作。但是,除了“选择”之外,我似乎无法向构成 MultiValueField 的子字段添加属性(如“标签”或“初始”)。
这是我的(简化的)代码:
class MyMultiWidget(django.forms.widgets.MultiWidget):
def __init__(self,*args,**kwargs):
myChoices = kwargs.pop("choices",[])
widgets = (
django.forms.fields.TextInput(),
django.forms.fields.TextInput(),
django.forms.fields.Select(choices=myChoices),
)
super(MyMultiWidget, self).__init__(widgets,*args,**kwargs)
class MyMultiValueField(django.forms.fields.MultiValueField):
widget = MyMultiWidget
def __init__(self,*args,**kwargs):
myLabel = "my label"
myInitial = "my initial value"
myChoices = [("a","a"),("b","b")]
fields = (
django.forms.fields.CharField(label=myLabel),
django.forms.fields.CharField(initial=myInitial),
django.forms.fields.ChoiceField(choices=myChoices),
)
super(MyMultiValueField,self).__init__(fields,*args,**kwargs)
self.widget=MyMultiWidget(choices=myChoices)
class MyField(models.Field):
def formfield(self,*args,**kwargs):
return MyMultiValueField()
class MyModel(django.models.Model):
myField = MyField(blank=True)
MyForm = modelform_factory(MyModel)
MyModel 的“myField”字段在 MyForm 中几乎可以正确呈现;它显示了三个小部件:两个 TextInput 和一个 Select。后者仅限于适当的选择。但前两者没有设置标签或初始值。
关于我做错了什么有什么建议吗?
谢谢。