你将需要添加一个__init__
方法来Action_Form
设置初始值,记住要通过super调用__init__
基ModelForm
类。
class Action_Form(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(Action_Form, self).__init__(*args, **kwargs)
self.fields['from_company'].queryset = Contact.object.filter(...
如果你打算将过滤器参数作为关键字args传递给Action_Form
,则需要在调用super之前将其删除:
myfilter = kwargs['myfilter']
del kwargs['myfilter']
或者,可能更好:
myfilter = kwargs.pop('myfilter')
1.如何使ModelMultipleChoiceField接受那些“初始”值? 这可以在你的Action_Form __init__
方法中使用ModelMultipleChoiceField initial属性来完成。
就像在Django源代码(db / models / fields / related.py)中所说的def formfield(self, **kwargs)
:
# If initial is passed in, it's a list of related objects, but the
# MultipleChoiceField takes a list of IDs.
因此,你需要为其提供ID列表:
class Action_Form(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(Action_Form, self).__init__(*args, **kwargs)
self.fields['from_company'].initial = [c.pk for c in Contact.object.filter()]