我有一个Django表单应该使用查询集来过滤选项:
class GenerateStudentAttendanceForm(forms.Form):
selected_class = forms.ModelChoiceField(queryset=Class.on_site.filter(
is_active=True,
academic_year__is_active=True
))
date = forms.DateField(initial=now().date())
问题是,在实例化表单时会评估Class.on_site.filter
,并且即使站点已更改,也会将其用于后续请求。
我怎么能绕过这个?
答案 0 :(得分:0)
您可以通过覆盖Form
类的构造函数来实例化该字段,以便在表单的每个实例化上评估查询集。
class GenerateStudentAttendanceForm(forms.Form):
date = forms.DateField(initial=now().date())
def __init__(self, *args, **kwargs):
super(GenerateStudentAttendanceForm, self).__init__(*args, **kwargs)
# add the key `selected_class` to the dictionary of `fields`
self.fields['selected_class'] = forms.ModelChoiceField(queryset=Class.on_site.filter(
is_active=True,
academic_year__is_active=True
))