在ModelChoiceField中使用callable / dynamic for queryset?

时间:2016-11-29 01:45:26

标签: python django django-forms

我有一个用于制作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] 

0 个答案:

没有答案