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
  • 相关阅读:
    gitlab使用
    小程序顶部导航栏标题不居中
    mpvue中使用vant-weapp
    原生js实现轮播图
    vue无法检测数组的变动
    vue报错TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function
    vue绑定style使用需要添加浏览器引擎前缀的 CSS 属性
    《孙子算经》之"物不知数"题:中国剩余定理
    Java大数处理类:BigInteger类和BigDecimal类
    【转】操作系统典型调度算法
  • 原文地址:https://www.cnblogs.com/gyk1030/p/9529899.html
Copyright © 2011-2022 走看看