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')
新聞熱點
疑難解答