zoukankan      html  css  js  c++  java
  • django进阶-Form自定制

    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
  • 相关阅读:
    MyEclipse添加XML的xsd文件和dtd文件(自动补全xml节点代码)
    浅析Java中Map与HashMap,Hashtable,HashSet的区别(转载)
    jsp中:jsp声明与jsp脚本<%! int count=0;%> 与<% int count=0;%>
    JSP内置对象详细介绍(上)<转载>
    学习运用json
    win7与win7之间无法访问共享文件的问题解决(转)
    关于工作情绪化的问题
    Hadoop配置学习
    问题汇总
    mysql读写分离
  • 原文地址:https://www.cnblogs.com/gyk1030/p/9529899.html
Copyright © 2011-2022 走看看