django-Form使用

django的Form三

2017-07-25  本文已影响0人  赖三石

常用选择插件

# 单radio,值为字符串 
# user = fields.CharField( 
#     initial=2, 
#     widget=widgets.RadioSelect(choices=((1,'上海'),(2,'北京'),)) 
# ) 
 
# 单radio,值为字符串 
# user = fields.ChoiceField( 
#     choices=((1, '上海'), (2, '北京'),), 
#     initial=2, 
#     widget=widgets.RadioSelect 
# ) 
 
# 单select,值为字符串 
# user = fields.CharField( 
#     initial=2, 
#     widget=widgets.Select(choices=((1,'上海'),(2,'北京'),)) 
# ) 
 
# 单select,值为字符串 
# user = fields.ChoiceField( 
#     choices=((1, '上海'), (2, '北京'),), 
#     initial=2, 
#     widget=widgets.Select 
# ) 
 
# 多选select,值为列表 
# user = fields.MultipleChoiceField( 
#     choices=((1,'上海'),(2,'北京'),), 
#     initial=[1,], 
#     widget=widgets.SelectMultiple 
# ) 
 
 
# 单checkbox 
# user = fields.CharField( 
#     widget=widgets.CheckboxInput() 
# ) 
 
 
# 多选checkbox,值为列表 
# user = fields.MultipleChoiceField( 
#     initial=[2, ], 
#     choices=((1, '上海'), (2, '北京'),), 
#     widget=widgets.CheckboxSelectMultiple 
# ) 

在使用选择标签时,需要注意choices的选项可以从数据库中获取,但是由于是静态字段 获取的值无法实时更新,那么需要自定义构造方法从而达到此目的。

models.py

class UserType(models.Model):
    caption = models.CharField(max_length=32)

class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    email = models.EmailField()
    user_type = models.ForeignKey(to='UserType',to_field='id')

方式一:

from django.forms import Form 
from django.forms import widgets 
from django.forms import fields 
  
class UserInfoForm(forms.Form):
    username = Ffields.CharField(max_length=32)
    email = Ffields.EmailField()
    user_type = Ffields.ChoiceField(
        choices=models.UserType.objects.values_list('id','caption')
    )

    def __init__(self, *args, **kwargs):
        super(UserInfoForm,self).__init__(*args, **kwargs)
        self.fields['user_type'].choices = models.UserType.objects.values_list('id','caption')

方式二:
使用django提供的ModelChoiceField和ModelMultipleChoiceField字段来实现

from django import forms 
from django.forms import fields 
from django.forms import widgets 
from django.forms import models as form_model  #这里models重复,注意
 
class FInfo(forms.Form): 
    authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all()) 
    # authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all()) 

上一篇 下一篇

猜你喜欢

热点阅读