Django--form表单中的select生成方法,如果select中的选项不固定,需要怎么操作。
forms
1 2 3 | class 表单类名称(forms.Form): host_type=forms.IntegerField( widget=forms.Select(choices=列表或元组) |
?forms
1 2 3 4 5 6 7 | admin = forms.IntegerField( widget=forms.Select() )def __init__(self,*args,**kwargs): #执行父类的构造方法 super(ImportForm,self).__init__(*args,**kwargs) self.fields[‘admin‘].widget.choices = models.SimpleModel.objects.all().values_list(‘id‘,‘username‘) #每次都会去数据库中获取这个列表 |
select的form格式是元组括元组,提交的是value(数字),字段类型是forms.IntegerField,插件widget=forms.Select(),属性choices=元组列表
面向对象中静态字段只要加载到内存就不会改变了,私有字段每次提交都刷新,原理是实例化对象的时候把静态字段进行了deepcopy到对象里,修改的时候就私有字段修改,静态字段不变。
1 2 3 4 5 6 7 8 9 | <body> <h1>录入数据</h1> <form action="/index/"> <p>{{ obj.host_type }}</p> <p>{{ obj.hostname }}</p> </form> <h1>数据列表</h1> ...</body> |
1 2 3 4 | from app01.views import account,homeurlpatterns = [ url(r‘^index/$‘,home.index ),] |
1 2 3 4 | from app01.forms import home as HomeFormdef index(request): obj = HomeForm.ImportForm(request.POST) return render(request,‘home/index.html‘,{‘obj‘:obj}) |
1 2 3 4 5 6 7 8 9 10 | from django import formsclass ImportForm(forms.Form): HOST_TYPE_LIST = ( (1,‘物理机‘), (2,‘虚拟机‘) ) host_type=forms.IntegerField( widget=forms.Select(choices=HOST_TYPE_LIST) ) hostname = forms.CharField() |

1 2 3 | class SimpleModel(models.Model): username = models.CharField(max_length=64) password = models.CharField(max_length=64) |
Django-Path > python manage.py makemigrations
Django-Path > python manage.py migrate
数据库app01_simplemodel表,随便造两条数据

1 2 3 4 5 6 7 8 9 | from app01 import modelsadmin = forms.IntegerField( widget=forms.Select() )def __init__(self,*args,**kwargs): #执行父类的构造方法 super(ImportForm,self).__init__(*args,**kwargs) self.fields[‘admin‘].widget.choices = models.SimpleModel.objects.all().values_list(‘id‘,‘username‘) #每次都会去数据库中获取这个列表 |
1 | <p>{{ obj.admin }}</p> |



原文:http://www.cnblogs.com/daliangtou/p/5307825.html