就像答案一样,我想在选择字段中动态加载数据库,我已经这样做了
queue = forms.ChoiceField(label=u'queue',choices=((x.que,x.disr) for x in Queue.objects.all()))
但它不起作用,我必须重新启动服务器,才能更新该字段。
就像答案一样,我想在选择字段中动态加载数据库,我已经这样做了
queue = forms.ChoiceField(label=u'queue',choices=((x.que,x.disr) for x in Queue.objects.all()))
但它不起作用,我必须重新启动服务器,才能更新该字段。
您需要调用__init__
以动态加载表单中的数据。例如:
class YourForm(forms.Form):
queue = forms.ChoiceField(label=u'queue')
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
self.fields['queue'].choices = ((x.que,x.disr) for x in Queue.objects.all()))
这样做的原因是,如果您__init__
在表单中调用,它会初始化一个类的实例并使用数据库中的最新数据更新选择列表。详细了解请看这里:为什么我们在python类中使用__init__?
使用ModelChoiceField而不是ChoiceField
: