如何使用 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?
和答案一样,我想在选择字段中动态加载数据库,我已经这样做了
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?