首頁常見問題正文

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

更新時間:2023-01-13 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

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

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

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

  1.字段選擇

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

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

  2.更改查詢集

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

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

  3.在表單集中保存對象

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

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

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

分享到:
在線咨詢 我要報名
和我們在線交談!