Django_定制form表单字段的choice从数据库取值

自定义了一个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那里校验总是不通过,不知道为啥,路过的知道的留言告诉我一下,谢谢。

你可能感兴趣的:(Django_定制form表单字段的choice从数据库取值)