如何在Django表单中禁用queryset缓存?

时间:2017-10-11 09:29:15

标签: django django-models

我有一个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,并且即使站点已更改,也会将其用于后续请求。

我怎么能绕过这个?

1 个答案:

答案 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
        ))