如何刷新Django表单下拉列表中的值?

时间:2019-03-25 16:58:07

标签: python django django-forms

在我的django项目中,我有一个带有数据库选项下拉列表的表单。服务器启动时,所有选项都存在,但是如果在运行时添加了一个选项,则新选项不会显示在下拉列表中。

forms.py

class filter(forms.Form): 
    filterOption=forms.CharField(widget=forms.Select(choices=getOptions())

functions.getOptions()从mySQL返回一个选项列表(这里不是数据库的问题)。 然后将其呈现在views.py中,并放入html表单中。

from .forms import filter

def index(request):
    filter = filter()
    return render(request, 'homePage/home.html',{'filter':filter})

我知道在服务器启动时会创建表单对象,但是如果添加了一个新选项并且getOptions()应该再返回一个选项,那么如何在不重新启动服务器的情况下重新初始化该表单对象。有时它是在〜10分钟后添加的,但我立即需要它。

3 个答案:

答案 0 :(得分:0)

您可以将addPic = () => { document.getElementById('takePic').click() } 与可调用对象一起使用:

ChoiceField

答案 1 :(得分:0)

好吧,如果您想在浏览器中重新加载表单html页面后显示新的复选框可能性,它应该立即存在。

您是否真的在数据库中查看过此选项已成功添加?

您是否有某种自定义的活动缓存处于活动状态?

如果要在不重新加载页面的情况下显示新的复选框选项,则需要实现一个非常复杂的自定义表单渲染,该渲染通过AJAX请求每X秒重新加载一次表单。

答案 2 :(得分:0)

通过以下方法解决了该问题:https://modwsgi.readthedocs.io/en/develop/user-guides/reloading-source-code.html

我基本上取消了进程,并在每次添加新值时重新加载该进程。

set

在链接的文档中说“触摸”-wsgi.py文件应该重新加载它。而且确实如此,但只有在您手动进行时,如果使用os.system('touch ... / wsgi.py'),则不会。为了重新加载代码,我必须终止该过程。