我创建了一个表单,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)
Run Code Online (Sandbox Code Playgroud)
起初,一切似乎都工作得很好,对HTML的<select>使用option得到了呈现。
问题是,当我Valve使用 Django Admin 界面向数据库添加新对象时,该ChoiceField字段需要一段时间才能更新 - 我无法立即在前端看到新选项。我尝试重新加载页面,强制重新加载,甚至将查询打印到终端 - 变量query立即更新,只是 HTML 没有。
它最终会在一段时间后更新,大约一分钟左右,这可能要归功于系统检查或重复runserver命令。
所以我想知道,我错过了什么?有什么方法可以强制更新表单吗?表单是否被缓存,这就是导致问题的原因?
这是因为在定义类时正在评估查询,而不是在实例化表单时。
不要这样做。使用接受查询集的ModelChoiceField。
class CronjobForm(forms.Form):
valves = forms.ModelChoiceField(required=True, widget=forms.Select, queryset=Valve.objects.all())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |