2016-05-19 174 views
1

在我的项目中,我需要筛选表单上的外键选择选项。我能做到这将参数传递到窗体的__init__方法,像这样:根据视图传递的对象ID筛选外键选择选项

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以便能够过滤foreignkey选项?

回答

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}) 

Django的文档约form_kwargs

+0

非常感谢。这就像一个魅力。我还必须从__init__方法中删除第一个参数equipamento_id。再一次,谢谢你。 – user2466766