如何使用 Django 中的数据库动态加载表单中的 ChoiceField 字段?

How to dynamic loading the field of ChoiceField in form using the database in Django?

和答案一样,我想在选择字段中动态加载数据库,我已经这样做了

queue = forms.ChoiceField(label=u'queue',choices=((x.que,x.disr) for x in Queue.objects.all()))

但是还是不行,必须重启服务器,才能更新字段。

使用ModelChoiceField代替ChoiceField

您需要调用__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__,它会初始化 class 的一个实例,并使用数据库中的最新数据更新选择列表。详细了解请看这里:Why do we use __init__ in python classes?