自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(models)中提取.
方法一:
queue = forms.ModelChoiceField(label=u'队列',queryset=Queue.objects.all())
方法二:
class ServerForm(forms.Form):
queue = forms.ChoiceField(label=u'队列')
def __init__(self,*args,**kwargs):
super(ServerForm,self).__init__(*args,**kwargs)
self.fields['queue'].choices=((x.que,x.disr) for x in Queue.objects.all())
注意:在Queue模型的__unicode__()函数中返回你下拉菜单需要显示的字段
我用第二种方法具体实现:
// model.py
from django.db import models
class allow_list(models.Model):
mac = models.CharField('终端mac',max_length=50,help_text='终端mac')
utime = models.DateTimeField('更新时间',auto_now_add=True,help_text='更新时间')
class Meta:
"""
"""
verbose_name = '强制下线-第三方允许操作表'
verbose_name_plural = verbose_name
def __unicode__(self):
return self.mac
//form.py
class AddForm(forms.Form):
mac = forms.ChoiceField(label='请选择终端mac')
def __init__(self, *args, **kwargs):
super(AddForm, self).__init__(*args, **kwargs)
self.fields['mac'].choices = ((x['mac'], x['mac']) for x in models.allow_list.objects.all().values('mac')
)
@@@@ 第一种方法实现的时候,view那里校验总是不通过,不知道为啥,路过的知道的留言告诉我一下,谢谢。