1. 程式人生 > >Django從models建立表單(forms)

Django從models建立表單(forms)

https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/

= ModelForm

對於對映到model的表單,避免重複定義屬性,Django提供了一個幫助函式讓你從一個Model直接建立Form.

from django.forms import ModelForm
from myapp.models import Article
#建立一個表單類
class ArticleForm(ModelForm):
    class Meta:
        model = Article
   fields = ['pub_date', 'headline', 'content', 'reporter']
# 建立一個表單用於新增文章
form = ArticleForm()
# 建立一個表單用於修改文章
article = Article.objects.get(pk=1)
form = ArticleForm(instance=article)

- 屬性型別

對映關係:
Model field=> Form field
AutoFieldNot represented in the form
BigIntegerFieldIntegerField with min_value set to -9223372036854775808 and max_value set to 9223372036854775807.
BooleanFieldBooleanField
CharFieldCharField with max_length set to the model field’s max_length
CommaSeparatedIntegerFieldCharField
DateFieldDateField
DateTimeFieldDateTimeField
DecimalFieldDecimalField
EmailFieldEmailField
FileFieldFileField
FilePathFieldFilePathField
FloatFieldFloatField
ForeignKeyModelChoiceField (see below)
ImageFieldImageField
IntegerFieldIntegerField
IPAddressFieldIPAddressField
GenericIPAddressFieldGenericIPAddressField
ManyToManyFieldModelMultipleChoiceField (see below)
NullBooleanFieldNullBooleanField
PositiveIntegerFieldIntegerField
PositiveSmallIntegerFieldIntegerField
SlugFieldSlugField
SmallIntegerFieldIntegerField
TextFieldCharField with widget=forms.Textarea
TimeFieldTimeField
URLFieldURLField

- 完整示例

from django.db import models
from django.forms import ModelForm
TITLE_CHOICES = (
    ('MR', 'Mr.'),
    ('MRS', 'Mrs.'),
    ('MS', 'Ms.'),
)
class Author(models.Model):
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=3, choices=TITLE_CHOICES)
    birth_date = models.DateField(blank=True, null=True)
    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Book(models.Model):
    name = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ['name', 'title', 'birth_date']

class BookForm(ModelForm):
    class Meta:
        model = Book
        fields = ['name', 'authors']

等價於下面的Form類定義 (除稍後討論的save()方法):

from django import forms
class AuthorForm(forms.Form):
    name = forms.CharField(max_length=100)
    title = forms.CharField(max_length=3,
                widget=forms.Select(choices=TITLE_CHOICES))
    birth_date = forms.DateField(required=False)

class BookForm(forms.Form):
    name = forms.CharField(max_length=100)
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())

- 校驗一個ModelForm

主要有兩步:
1. 校驗form
2. 校驗model物件

Model Form校驗被顯示的觸發,在呼叫is_valid(),或訪問errors屬性和呼叫full_clean()時.
Model校驗在from校驗階段被觸發,在form的clean()方法被呼叫後。

# 重寫clean()方法
你可以重寫clean()方法,以提供額外的校驗。
繫結到一個model物件的model form包含一個instance屬性,用於訪問此特定物件。

# save()方法
>>> from myapp.models import Article
>>> from myapp.forms import ArticleForm
從POST資料建立一個例項
>>> f = ArticleForm(request.POST)
從form資料儲存一個新文章物件
>>> new_article = f.save()
建立一個表單編輯已經存在的文章,但使用POST資料來填充form
>>> a = Article.objects.get(pk=1)
>>> f = ArticleForm(request.POST, instance=a)
>>> f.save()




相關推薦

Djangomodels建立(forms)

https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/ = ModelForm 對於對映到model的表單,避免重複定義屬性,Django提供了一個幫助函式讓你從一個Model直接建立Form. from

模型建立ModelForm

>>> AuthorFormSet = modelformset_factory(Author, fields=('name',), max_num=4, extra=2) >>> formset = AuthorFormSet(queryset=Author.obje

Django中的(forms.Form)

Django中的表單: 1、HTML中的表單:用來提交資料給伺服器的,不管後臺的伺服器用的是Django還是PHP語言還是其他語言 2、Django中的表單: ①渲染表單模板 ②表單驗證資料是否合法 3、Django中表單使用流程: ①app下新建fo

Django基礎(5): forms的設計與使用

Django網路應用開發的5項基礎核心技術包括,,,和Form(表單)的使用。今天小編我就來拼個老命給你來介紹下第五項Django核心基礎知識之表單forms的設計與使用吧, 並重點介紹下表單的驗證。想

Django中的Form驗證

服務 是否 input req 驗證方法 有著 require DC 通過 回憶一下Form表單驗證的邏輯: 前端有若幹個input輸入框,將用戶輸入內容,以字典傳遞給後端。 後端預先存在一個Form表單驗證的基類,封裝了一個檢測用戶輸入是否全部通過的方法。該方法會先定義好

Django框架 之 Form和Ajax上傳文件

不可 _for render ren files AS AD 什麽 OS 瀏覽目錄 Form表單上傳文件 Ajax上傳文件 偽造Ajax上傳文件 Form表單上傳文件 html <h3>form表單上傳文件&

# Django admin、form的應用記錄

表單 gets 使用 查找 圖片 clas quest ali password 目錄 Django admin、form表單的應用記錄 一 Django admin 1. 使用介紹 form組件使用 1. form的作用 2. form組件生成HTMKL代碼 3. f

Django 中的Form認證

ons ios ive har emp 幫助 field類 含義 ack 一、Form表單 ? 1.1 Form的幾個功能 驗證用戶數據(顯示錯誤信息) 初始化頁面顯示內容 HTML Form提交保留上次提交數據 生成HTML標簽 ? 1.2 創建表單類Form 1.

django中的 form 操作

格式化 esp cal hold offset row exception 價格 文件顯示 1. 定義 from django import forms # 定義form class RegForm(fo rms.Form): user = forms

Django中的form

ati 錯誤信息 信息 ren creat obb init elif sel 1,手寫一個form表單提交數據 有input標簽,讓用戶可以填數據 校驗form表單提數據 提示錯誤信息 html頁面代碼: <!DOCTYPE html> <html

UAP65 建立問題記錄

最近通過UAP65建立NC表單,彙總下開發過程中碰到的問題和注意事項。 1. 實體 新增的屬性 一定剛要勾選【啟用】,【動態屬性】 2. 主子表單據要新增【單據日期】並實現相關業務介面 3. 所有自己新增的表單 【程式碼風格】一律為【自定義樣式】。 4. 主子表單據 主表【訪問型別】Ag

Django元件之Form

一、Django中的Form表單介紹 我們之前在HTML頁面中利用form表單向後端提交資料時,都會寫一些獲取使用者輸入的標籤並且用form標籤把它們包起來。 與此同時我們在好多場景下都需要對使用者的輸入做校驗,比如校驗使用者是否輸入,輸入的長度和格式等正不正確。如果使用者輸入的內容有錯誤就需要

Django基礎之form的補充進階

1. 應用Bootstrap樣式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" conte

django -- 錯誤跳轉&驗證&資料分頁

## 重點: 1、錯誤跳轉 2、表單驗證 3、資料分頁 ## 複習   ``` from django.views.decorators.http from require_http_methods,require_GET,require_POST @require

JavaFX入門(五)之在JavaFX中建立

在開發應用程式時,建立表單是一項常見活動。本教程將向您介紹屏幕布局的基礎知識,如何將控制元件新增到佈局窗格以及如何建立輸入事件。 在本教程中,您將使用JavaFX構建如圖4-1所示的登入表單。 圖4-1登入表單   本入門教程中使用的工具是NetBeans

React快速開發迷你記賬簿------day06 建立

day 06 建立表單 本節目標:實現這個表單 Records.js檔案新增如下程式碼 ... render(){ const { error, isLoaded, record

趴一趴如何用最簡單的方式html form中獲取到資料

最近網速一直不太好 ~~~不開心 本文采用的是最簡單的方式,僅供自己試驗,畢竟存在一些不安全因素。 看了其他好的的方式發現都太麻煩,所以自己總結下。 是這樣的:input.html頁面中有一段程式碼。

jQuery動態建立並提交

$("button").click(function(){ action = "http://www.baidu.com"; form = $("<form></form>") form.attr('a

JQuery 動態建立,並自動提交

前言:寫這個是為了實現使用cookie進行自動登入的功能, 下面的程式碼是一個元素一個元素進行建立和賦值的, (可以嘗試下將所有的html程式碼(form、input)全部拼好以後放到${ } 中,再進行提交。) submit的時候注意下寫法,就這樣 //獲取cookie中的

Django學習(六):

表單系統的核心部分是Django 的Form 類;Form 類描述一個表單並決定它如何工作和展現。就像模型類的屬性對映到資料庫的欄位一樣,表單類的欄位會對映到HTML 的表單<input>元素(或其它表單元素)構建一個簡單表單的流程1,在form.py中定義表單類