Django-表单的ChoiceField无法立即更新

时间:2018-08-03 12:49:50

标签: django python-3.x forms

我已经在forms.py中创建了一个表单,该表单基于数据库中的对象使用选择输入:

from controls.models import Valve

class CronjobForm(forms.Form):
    query = Valve.objects.all()
    VALVE_CHOICES = [
        (valve.pk, valve.name) for valve in query
    ]
    valves = forms.ChoiceField(required=True, widget=forms.Select, choices=VALVE_CHOICES)

起初,一切似乎都工作正常,呈现了HTML的<select>option

问题是,当我使用Django Admin界面向数据库添加新的Valve对象时,ChoiceField字段需要一段时间才能更新-我看不到立即在前端添加新选项。我试图重新加载页面,强制重新加载,甚至将查询输出到终端-变量query立即得到更新,只是HTML没有更新。

可能要经过一分钟,一分钟左右的时间才进行更新,这可能要归功于系统检查或重复执行runserver命令。

所以我想知道,我想念什么?有什么方法可以强制更新表格?表单是否被缓存,这是导致问题的原因?

2 个答案:

答案 0 :(得分:2)

这是因为查询是在定义类时而不是在实例化表单时进行评估的。

不要这样做。使用ModelChoiceField,它接受​​查询集。

mlr

答案 1 :(得分:0)

我们还可以传递函数的引用,该函数将返回数组供选择,如the choices' description of django docs中所述。

我也遇到了同样的问题,这样解决了。

def get_valve_choices():
    return [
        (valve.pk, valve.name) for valve in Valve.objects.all()
    ]

class CronjobForm(forms.Form):
    valves = forms.ChoiceField(required=True, widget=forms.Select, choices=get_valve_choices)