Form自定制

from django.forms import fields # fields用来定义字段
class FM(forms.Form):
user = fields.CharField(
error_messages={'required':'用户名不能为空'},
widget = widgets.Input(attrs={'class':'c1'}) # “HTML插件”,用来定义标签,并添加属性
)
# 实例化和调用
obj = FM(request.POST)
r1 = obj.is_valid() # 返回Ture or False,表示格式是否正确
obj.cleaned_data # 获取提交的数据
obj.errors # 获取错误信息

Django内置字段:
Field
required=True, 是否允许为空
widget=None, HTML插件
label=None, 用于生成Label标签或显示内容
initial=None, 初始值
help_text='', 帮助信息(在标签旁边显示)
error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'}
show_hidden_initial=False, 是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
validators=[], 自定义验证规则
localize=False, 是否支持本地化
disabled=False, 是否可以编辑
label_suffix=None Label内容后缀
ChoiceField
......(其他请看链接)
     http://www.cnblogs.com/wupeiqi/articles/6144178.html


ModelForm    # model+form验证+数据库操作
class UserInfoModelForm(forms.ModelForm):
利用 models.A中字段

1.生成HTML标签:class Meta:...
2.mf = xxxModelForm(instance=ModelObj)
3.添加额外的标签 is_rmb = Ffields.CharField(widget=Fwidgets.CheckboxInput())
4.各种验证is_valid() # 各种钩子
5.mf.save()
# 或
instance = mf.save(False)
instance.save()
mf.save()

class UserInfoModelForm(forms.ModelForm):
    is_rmb = Ffields.CharField(
        widget=Fwidgets.CheckboxInput()
    )

    class Meta:
        model = models.UserInfo  # 去哪个类里获取字段
        fields = '__all__'  # __all__代表所有字段
        # fields = ['username']  # 值获取username字段
        # exclude = ['username']  # 除了username意外的
        # 改名字
        labels = {
            'email': '邮箱'
        }
        # 追加注释
        help_texts = {
            'username': '...'
        }
        # 修改标签和添加属性
        widgets = {
            'username': Fwidgets.Textarea(attrs={'class':'c1'})
        }
        # 修改提示信息
        error_messages = {
            'username': {
              'required': '用户名不能为空'
            },
            'email':{
                'required': '邮箱不能为空',
                'invalid': '邮箱格式不正确'
            }
        }
        # 修改格式
        # field_classes = {
        #     'email': Ffields.URLField
        # }

class UserInfoForm(forms.Form):
    username = Ffields.CharField(max_length=32)
    email = Ffields.EmailInput()
    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')
View Code

 

 posted on 2018-08-24 14:57  ._东汕再  阅读(114)  评论(0编辑  收藏  举报