Form class
api | 类型 | 作用 | 备注 |
is_bound | 属性Boolean | 检查当前form是否已经绑定数据 | |
is_valid() | 方法Boolean | 执行校验器,检查form中的数据是否符合定义规则 | |
errors | 属性dict | 存放错误信息 | 当form绑定数据以后,调用is_valid或者errors都回导致validate的执行。而且只会执行一次。不管以后调用多少次 |
initial | 属性 | 给form中的字段初始化 | 在初始化的调用方式f = ContactForm(initial={'subject': 'Hi there!'}),当然也可以在field中指定 forms.CharField(initial='class')。两者的优先级是:后者生效 |
fields | 属性 | 获取form的字段信息 | 另外拥有base_fields 这个属性,是整个Python进程的所有form的 instance共享的,如果更改其中内容。所有同一form的instantce都会 |
cleaned_data | 属性 | 获取form中的安全数据 | 即使form出错。也可以获取其中正确的内容。而且同时包括Optional的字段 |
as_table() default、as_ul()、as_p() | 方法 | 获取form生成的html | |
required_css_class、error_css_class | 属性 | 设定默认的css和错误的css | eg. <tr class="required"><th><label for="id_subject">Subject:</label> ... <tr class="required"><th><label for="id_message">Message:</label> ... <tr class="required error"><th><label for="id_sender">Sender:</label> ... <tr><th><label for="id_cc_myself">Cc myself:<label> ... |
auto_id | 属性 | 设置html的生成id方式 | 三种值:False:不生成label标签和input的id值 True:生成label标签而且直接使用field的name作为id值 "xxx_%s":生成label标签。而且id的前缀为xxx_ 。。 ps:如果第三不加入%s。则当成True来处理。默认的处理方式是"id_%s" |
label_suffix | 属性 | 在label的值后面出现的字符串 | 默认为: 自己设置—>等符号 |
is_multipart | 方法 | 检测这个form是否需要multipart | 检查是否添加enctype="multipart/form-data" |
prefix | 属性 | 一般用于同一Form区别namespace用 |
bound field class
api | 类型 | 作用 | 备注 |
errors | 属性list | 获取当前绑定字段的错误 | |
label_tag(contents=None, attrs=None, label_suffix=None) | 方法Str | 获取当前字段的生成的label_tag | |
css_classes() | 方法Str | 获取或者设置当前字段的渲染的css | 参数带值就是设置。没就是设置 |
values() | 方法 | 获取当前字段的值 | |
id_for_label | 字段的id | 只读当前label的id | 设置使用 my_field = forms.CharField(widget=forms.TextInput(attrs={'id': 'myFIELD'})) |
api | 类型 | 作用 | 备注 |
clean(value) | 方法 | 执行validate,如果成功输出clean 的Str,如果失败抛出Error | |
required | 属性 | 如果设置为True,则需要设置此值 | |
label | 属性 | 设置输出的html中label标签里面的值 | |
inital | 属性 | 初始化值,仅在第一次初始化的时候调用 | |
widget | 属性 | 可以自定义widget | |
help_text | 属性 | 在渲染的时候会放在渲染字段的后面 | |
error_messages | 属性 | 传入一个dict重写错误的消息 | eg. name = forms.CharField(error_messages={'required': 'Please enter your name'}) |
validators | 属性 | 设置当前字段的校验器 | |
localize | 属性 | 或者本地化字段 |
使用request.FILES来初始化即可 f = ContactFormWithMugshot(request.POST, request.FILES) 字段
可以通过model并指定字段直接生成form,避免重复声明
eg.
class ArticleForm(ModelForm): ... class Meta: ... model = Article ... fields = ['pub_date', 'headline', 'content', 'reporter']
对应表:
Model field | Form field |
---|---|
AutoField | Not represented in the form |
BigIntegerField | IntegerField with min_value set to -9223372036854775808 andmax_value set to 9223372036854775807. |
BooleanField | BooleanField |
CharField | CharField with max_length set to the model field’s max_length |
CommaSeparatedIntegerField | CharField |
DateField | DateField |
DateTimeField | DateTimeField |
DecimalField | DecimalField |
EmailField | EmailField |
FileField | FileField |
FilePathField | FilePathField |
FloatField | FloatField |
ForeignKey | ModelChoiceField (see below) |
ImageField | ImageField |
IntegerField | IntegerField |
IPAddressField | IPAddressField |
GenericIPAddressField | GenericIPAddressField |
ManyToManyField | ModelMultipleChoiceField (see below) |
NullBooleanField | CharField |
PositiveIntegerField | IntegerField |
PositiveSmallIntegerField | IntegerField |
SlugField | SlugField |
SmallIntegerField | IntegerField |
TextField | CharField with widget=forms.Textarea |
TimeField | TimeField |
URLField | URLField |
PS:
使用方法:
modelForm save方法:可以直接保存到database如果出错也会抛出Error ,如果save(commit=False),则只会创建对象不会提交,可以继续修改
modelForm,中如果要指定相应field的属性可以通过meta指定
eg.
class Meta: model = Author fields = ('name', 'title', 'birth_date') labels = { 'name': _('Writer'), } help_texts = { 'name': _('Some useful help text.'), } error_messages = { 'name': { 'max_length': _("This writer's name is too long."), }, }
也可以通过字段设置,eg.
class ArticleForm(ModelForm): headline = MyFormField(max_length=200, required=False, help_text="Use puns liberally") class Meta: model = Article fields = ['headline', 'content']
可以在运行时动态使用factory生成modelform 不需要事先声明。 eg.BookForm = modelform_factory(Book, fields=("author", "title"))
可以生产同一个form的set,并获取值 使用方式:
def manage_authors(request): AuthorFormSet = modelformset_factory(Author) if request.method == 'POST': formset = AuthorFormSet(request.POST, request.FILES) if formset.is_valid(): formset.save() # do something. else: formset = AuthorFormSet() return render_to_response("manage_authors.html", { "formset": formset, })
可以设定form需要的资源eg.
class CalendarWidget(forms.TextInput):
class Media:
css = { 'all': ('pretty.css',) } js = ('animations.js', 'actions.js')