0

我想将模型“modelToUse”传递给我的表单:

class ActsAddForm(forms.Form):
    def __init__(self,*args,**kwargs):
        self.modelToUse = kwargs.pop('modelToUse')
        super(ActsAddForm,self).__init__(*args,**kwargs)
    actsToValidate=forms.ModelChoiceField(queryset=modelToUse.objects.filter(validated=0), empty_label="Select an act to validate", widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))

我收到错误“未定义名称'modelToUse'”。怎么了?

我想在我看来这样称呼它:

addForm=ActsAddForm(modelToUse=ActsIdsModel())
4

1 回答 1

2

你误解了 Python 中作用域和类的工作方式。actsToValidate是类级别的属性,将在定义类时进行评估。__init__另一方面,在类被实例化时进行评估。

即使以正确的顺序对它们进行评估,它仍然不起作用,因为您还没有放入modelToUse类范围,可以通过字段定义看到它。

您需要在没有查询集的情况下在类级别定义字段,然后将其添加到__init__方法中。像这样:

class ActsAddForm(forms.Form):
    actsToValidate=forms.ModelChoiceField(empty_label="Select an act to validate", widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))

    def __init__(self,*args,**kwargs):
        modelToUse = kwargs.pop('modelToUse')
        super(ActsAddForm,self).__init__(*args,**kwargs)
        self.fields['actsToValidate'].queryset=modelToUse.objects.filter(validated=0)
于 2013-07-21T08:20:09.017 回答