我有一个用于制作formset的表单,如下所示:
class PreferenceForm(forms.Form):
preference = forms.ModelChoiceField(SchoolClass.objects.currently_enrolling())
current_enrolling()queryset方法返回一个查询集,ModelChoiceField从中选择:
class SchoolClassManager(models.Manager):
def currently_enrolling(self):
return self.filter(semester=Semester.current_enrolment()).order_by("subject__name", "name")
这一直有效,直到此查询集返回的数据(即当前正在注册的类)发生更改 - 表单不显示现在正在注册的新类。重新启动django可以解决问题,但这不是最佳解决方案。我认为这意味着此代码在启动时运行一次,而不是随后运行。有没有办法让这个工作适应不断变化的查询集?
编辑: 这是Semester(模型)类中current_enrolment的代码:
@classmethod
def current_enrolment(cls):
semesters = cls.objects.filter(enrolments_open=True)
if len(semesters) == 0:
return cls.objects.latest('pk') # no match, so we'll use the most recently created semester
elif len(semesters) == 1:
return semesters[0]
else:
return semesters[0]