根据视图传递的对象ID过滤表单上的foreignkey选项

时间:2016-05-19 15:16:26

标签: django django-models django-forms django-views

在我的项目中,我需要过滤表单上的外键选择选项。我可以将参数传递给表单的__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)

问题是我无法将参数equipamento_id传递给inlineformset_factory:

form1 = inlineformset_factory(Actividade, Resultado, form=ResultadoForm(equipamento_id), exclude=('actividade',), extra=len(testes_list))

这会引发错误。如何将参数equipamento_id传递给inlineformset_factory以便能够过滤外键选项?

1 个答案:

答案 0 :(得分:1)

如果您使用的是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})

关于form_kwargs的django doc。