全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)常見(jiàn)問(wèn)題正文

Python Web之表單:利用工廠函數(shù)定義表單集

更新時(shí)間:2023-01-13 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  利用Django提供的modelformset_factory()函數(shù)可以簡(jiǎn)單地定義給定模型類(lèi)的FormSet類(lèi),進(jìn)而實(shí)現(xiàn)模型表單的批量操作。modelformset_factory()定義在django.forms模塊中,以Goods模型類(lèi)為例,示例代碼如下:

from django.forms import modelformset_factory
from goods.models import Goods
GoodFormset = modelformset_factory(Goods, fields=('name','price'))

  以上代碼在生成表單集的同時(shí)利用參數(shù)fields選擇了表單使用的字段。下面以GoodFormSet為例,介紹模型表單集的常用操作。

  1.字段選擇

  通過(guò)modelformset_factory()函數(shù)的參數(shù)fields和exclude選擇模型類(lèi)中的字段作為表單字段。使用exclude參數(shù)排除表單不需要的字段,示例代碼如下:

GoodFormSet = modelformset_factory(Goods, exclude=('stock',))

  2.更改查詢(xún)集

  默認(rèn)情況下表單集接收模型類(lèi)的全部數(shù)據(jù)作為查詢(xún)集,通過(guò)modelformset_factory()函數(shù)的參數(shù)queryset可以更改查詢(xún)集,示例代碼如下:

formset = GoodFormSet(queryset=Goods.objects.filter(name_startswith='H'))

  3.在表單集中保存對(duì)象

  類(lèi)似ModelForm,模型表單集中的數(shù)據(jù)也可以通過(guò)save()方法保存為模型對(duì)象,示例代碼如下:

f = GoodFormSet({'name':'IPAD 2018','price':5999,'stock':5,'sales':4})
instances = f.save()

  模型表單集的save()方法返回已經(jīng)保存到數(shù)據(jù)庫(kù)的實(shí)例。如果表單集中的數(shù)據(jù)不會(huì)覆蓋給定實(shí)例的數(shù)據(jù),那么這個(gè)實(shí)例不會(huì)被保存到數(shù)據(jù)庫(kù),也不會(huì)包含在返回值里。

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!