在我的项目中,我需要过滤表单上的外键选择选项。我可以通过向表单的__init__
方法传递一个参数来实现这一点,比如:
class ResultadoForm(forms.ModelForm):
frequencia = forms.CharField(max_length=50)
tolerancia = forms.CharField(max_length=255)
def __init__(self, equipamento_id, *args, **kwargs):
equipamento_id = kwargs.pop('equipamento_id')
super (ResultadoForm, self ).__init__(*args, **kwargs)
self.fields['teste'].queryset = Teste.objects.filter(equipamento=equipamento_id)
class Meta:
model = Resultado
exclude = ['actividade']
在我看来,我所要做的就是:
form1 = ResultadoForm(equipamento_id)
问题是我无法将参数equimate_id传递给inlineformset_filter:
form1 = inlineformset_factory(Actividade, Resultado, form=ResultadoForm(equipamento_id), exclude=('actividade',), extra=len(testes_list))
这会引发一个错误。如何将参数equamento_id传递给inlineformset_filtery以便能够过滤外键选项?
如果您使用django 1.9,您可以使用form_kwargs
来传递数据:
FormSet1 = inlineformset_factory(Actividade,
Resultado,
form=ResultadoForm,
exclude=('actividade',),
extra=len(testes_list))
formset = FormSet1(form_kwargs={'equipamento_id': equipamento_id})
django关于form_kwargs
的文档。