更新時間:2023-01-13 來源:黑馬程序員 瀏覽量:
利用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ù)庫,也不會包含在返回值里。