关于django model form
来源:互联网 发布:php删除符号 编辑:程序博客网 时间:2024/05/16 12:57
modelform从model自动导出form,基本使用如下:
class XXXForm(forms.ModelForm):
class Meta:
model = Your Model # 指定从那个model导出
# fields=("field1", "field2") #可以限制只导出哪部分字段
1.重载初始化方法
def __init__(self, *args, **kwargs): super(XXXForm, self).__init__(*args, **kwargs) #do some other thing, 比如设置某个字段的值,或者HTML样式,也可以动态添加一个字段或者删除一个字段 self.fields['example'].widget.attrs['hidden'] = True
2.widgets属性
很多时候 django默认输出的 HTML 标签类型,不是我们想要的。 比如“多对多”,django默认输出一个 支持多选的下拉框 <select>,那样用户体验不好,需要按住ctrl键多选。
习惯上多选用复选框<checkbox>。
在init方法之中 是不能改变 super一句中已经生成的字段的html类型,只能改变值和样式。此时应该在 Meta元类中添加widgets配置。
class XXXForm(forms.ModelForm):
class Meta:
model = Your Model # 指定从那个model导出
widgets = {
"fieldname": forms.TextInput(attrs={"style": "width:180px;", "maxlength": 5, }), #直接设置style或者某项属性改变样式,记得字典格式,赋值给attrs
}
当然,也可以待表单初始化完成后,在设置html样式,比如
form = XXXForm(可能的参数,如instance,initial......)
form.fields["url"].widget.attrs = {"disable": "true", "readonly": "true"}#让这个字段在浏览器页面不可编辑
3.直接定义字段
有时候配置widgets仍然很麻烦,比如需要配置的field较多,每个又很长,则直接定义该字段。
class XXXForm(forms.ModelForm):
fieldname = forms.Field类型(label=u“标签",..........该类型的参数)
class Meta:
model = Your Model # 指定从那个model导出
需要注意,如果该fieldname与model中某个字段名相同,则用户定义类型样式覆盖django默认。很适合覆盖django诸如多选下拉框这种不友好的类型。
如果该fieldname不在model字段中,则会新增加一个字段,效果与在init方法中动态加字段一样。但是时机更早,此种方式,在super一句中已经生成该字段,
init方法中动态添加是在super之后。
更多资料 https://docs.djangoproject.com/en/1.5/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets
官网中很多技巧 ,诸如 改变字段顺序,formfactory, 改变queryet(仅外键和多对多才有的参数),以及initial参数等都可以通过第三种方式实现,更直观。但是如果初始化过程中对于字段的初始化时机有要求,以上技巧还是按照官网推荐的方法做。
- 关于django model form
- django关于model查询
- django的model、form.py、内置widgets、html表单相关
- Django(八)上:Model操作和Form操作
- Django model
- Django model
- Django model
- django model
- django--Model
- Django-Model
- Django Model
- Django Form
- django form
- django form
- Django---form
- 关于Django model 与json序列的转换
- 关于django model postgres的json字段编码问题
- Django(八)下:Model操作和Form操作、序列化操作
- MyBatis构建sql时动态传入表名以及字段名
- JWASM简介
- 字符集的处理
- SQL视图的优缺点
- 选择目录对话框和选择文件对话框
- 关于django model form
- Java定时器Quartz
- wav文件详解
- Automator 教程例子
- 导入android project到 eclipse 出现Unable to resolve target 'android-8'的错误
- AppFuse 2.0初体验
- 平台总线
- 『C/C++』POD types
- make 和 gmake