如何将参数传递给ModelForm Field构造函数?
class ThingSettingsForm(ModelForm):
things = forms.ModelChoiceField(empty_label='--',queryset=self.?????)
def __init__(self, *args, **kwargs):
super(ThingSettingsForm, self).__init__(*args, **kwargs)
if 'instance' in kwargs:
instance = kwargs['instance']
?????? = instance.visible_things
#self.fields['things'] =
#forms.ModelChoiceField(queryset=instance.visible_things)
class Meta:
model = Gallery
fields = (
'title',
'summary',
'things',
)
在底层模型中,“东西”是一个models.ForeignKey,默认显示每个可能的关系是不合适的。
答案 0 :(得分:1)
如果visible_things
是查询集,您可以更改表单字段的queryset
属性:
self.fields['things'].queryset = instance.visible_things
它确实必须是一个查询集,而不是一个任意的可迭代,但除此之外它很容易。
答案 1 :(得分:0)
如果arg是可选的,只需添加一个kwarg:
myform = ThingSettingsForm(thing=<my instance>)
你必须先改变init方法来弹出你的新arg,因为super不期待这个arg:
def __init__(self, *args, **kwargs):
instance = kwargs.pop('thing', None)
super(ThingSettingsForm, self).__init__(*args, **kwargs)
或者如果需要,只需将其添加到init签名中:
def __init__(self, thing, *args, **kwargs):
pass
并称之为:
myform = ThingSettingsForm(<my instance>)