Django ModelForm修改默认的控件属性
2017-04-09 15:47
274 查看
Django 中利用ModelForm 可以快速地利用数据库对应的Model 子类来自动创建对应表单.
例如:
但这样默认创建的表单是很丑的, 一般需要重写字段的控件属性, 来加入各种效果. 总结下我常用的两种.
这种方式可以指定控件的类型及其对应的属性, 不过大部分时候, 默认的控件类型已经够用了, 只需要修改控件的属性. 可以采取另外一种更方便的方法.
重写
通过通过重写
例如:
from django.db import models from django.forms import ModelForm class Book(models.Model): name = models.CharField(max_length=100) authors = models.ManyToManyField(Author) class BookForm(ModelForm): class Meta: model = Book fields = ['name', 'authors']
但这样默认创建的表单是很丑的, 一般需要重写字段的控件属性, 来加入各种效果. 总结下我常用的两种.
修改Meta的widgets属性
在Django手册的ModelForm一章中, 提供了这种方式, Book 的name 属性为CharField 如果希望它表示成一个<textarea>而不是默认的
<input type="text">时, 可以按如下方式覆盖字段默认的Widget:
class BookForm(ModelForm): class Meta: model = Book fields = ['name', 'authors'] widgets = { 'name': Textarea(attrs={'cols': 80, 'rows': 20}), }
这种方式可以指定控件的类型及其对应的属性, 不过大部分时候, 默认的控件类型已经够用了, 只需要修改控件的属性. 可以采取另外一种更方便的方法.
重写__init__
方法
通过通过重写__init__方法, 遍历base_fields字段, 来快速修改控件的属性.
class BookForm(ModelForm): class Meta: model = Book fields = ['name', 'authors'] def __init__(self, *args, **kwargs): super(BookForm, self).__init__(*args, **kwargs) for field_name in self.base_fields: field = self.base_fields[field_name] field.widget.attes.update({'cols': 80, 'rows': 20})
相关文章推荐
- 解决.net中Winform父控件修改Font属性,对子控件布局的影响
- 判断网页控件是否存在,并修改显示属性
- 遍历Repeater中某个控件并修改控件属性
- 如何修改PreferencePage中控件的默认布局
- MFC中从窗体类外修改控件属性的几种方法
- 写Form设计器尝试(四) 修改窗体上的控件属性
- 动态编辑母版页(与母版页通信,如修改控件属性等)
- 利用反射动态创建控件,且修改其属性
- 我提问的:找一个通用函数,修改同一类别的控件的一些属性,或者优化、重构下面的代码。
- 在服务器端修改HTML控件的属性
- 对话框控件属性的修改
- 对话框控件属性的修改
- 对话框控件属性的修改
- 暴汗,list控件默认sort属性为true
- [ASP.NET 控件实作 Day18] 修改集合属性编辑器
- 对于html控件,在cs文件中修改属性
- 写Form设计器尝试(四) 修改窗体上的控件属性
- 在服务器端修改HTML控件的属性
- Flex中如何修改Alert控件中默认按钮标签(button label)的例子
- 新手看过来:VC对话框控件属性的修改