我想将模型“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();'}))
我收到错误“name'modeToUse'未定义”。怎么了?
我想在我的观点中称之为:
addForm=ActsAddForm(modelToUse=ActsIdsModel())
答案 0 :(得分:1)
你误解了范围和类在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)