Form与ModelForm的 使用

Form
定义Form的常用的字段
CharField  文本框
InterFile  数值框
DateField  参数input_formats设置时间格式
TimeField
DateTimeField 
RegexField 文本框,判断是否与参数regex设置的正则表达式匹配
EmailField 
FileField 文件上传框 max_length设置文件名最大长度,all_empty_file设置是否文件大小可以为空
ImageFild 文件上传控件 验证是否是可以pillow识别图片格式
FilePathField 文件选择控件 path必选参数
URLField 文本框
BooleanField
ChoiceField 参数choice以元组形式表示
	共同的参数:
		required
		widget 设置控件的颜色
		initial 设置表单的初始值
		hepl_text 设置帮助提示信息
		disabled 设置是否可编辑 
		localize 设置本地化
		error_messages 设置错误信息,比如error_messages = {'required':'不能为空'}
	数据清洗方式:
		widget是一个forms.widgets对象,用于设置CSS颜色,,比如在字段中设置
		    password = forms.CharField(label='密码',
                           min_length=8,
                           max_length=16,
                           error_messages={
                               'min_length':'密码长度不能少过8个字符',
                               'max_length':'密码长度不能超过16个字符'
                           },
                           widget=forms.PasswordInput())
		或者在字段外设置        widgets = {
        'decs':forms.Textarea,
        'color':ColorRadioSelect(attrs={'class':'color-radio'})
    }
	
	error_messages字典形式写
	validators 自定义函数
		mobile_phone = forms.CharField(label='手机号',validators=[RegexValidator(r'^(1|2|3|4|5|6|7|8|9)\d{6,11}$','手机格式错误'),])
		
		def clear_属性名(self):pass
Form开发中经常用到的属性与方法
data
is_valid()
errors()
as_table()
as_ul()
as_p()
ModelForm属性和方法
instance 初始化数据
save() 保存数据

特色定义属性
	model:绑定Modle对象
	fields:可选属性'__all__'
	exclude
怎么修改默认样式
class WikiModelForm(bootstrap, forms.ModelForm):
    class Meta:
        model = models.Wiki
        exclude = ['project', 'depth',]

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        """如果像把某个字段数据重置,先找到这个字段,然后重置"""
        total_data_list = [("", "请选择"),]

        # 找到想要的指端数据
        data_list = models.Wiki.objects.filter(project=request.tracer.project).values_list('id', 'title')
        total_data_list.extend(data_list)

        # 进行修改
        self.fields['parent'].choices = total_data_list
Bootstrap怎么设置
class bootstrap(object):
    bootstrap_class_exclude = []

    def __init__(self,*args,**kwargs):
        super().__init__(*args, **kwargs)
        for name,filed in self.fields.items():
            if name in self.bootstrap_class_exclude:
                continue
            odl_attrs = filed.widget.attrs.get('class', "")
            filed.widget.attrs['class'] = '{} form-control'.format(odl_attrs)  # 添加属性
            filed.widget.attrs[''] = '请输入%s'%(filed.label,)
posted @ 2021-01-22 15:12  大魔头的取经故事  阅读(211)  评论(0编辑  收藏  举报