Django的Modelforms用法簡(jiǎn)介
from django.forms import ModelForm
class Test(ModelForm):
# 把那張表轉(zhuǎn)化成form組件
class Meta:
# 這個(gè)意思即是把Article轉(zhuǎn)化成form組件
model = models.Article
# 把表中的所有的字段都做轉(zhuǎn)化,這里也可以傳遞一個(gè)list,可以指定顯示某些字段
fields = "__all__"
# modelform組件的使用方法和forms組件的用法一樣,但是i如果要保存出數(shù)據(jù)的時(shí)候,可以直接調(diào)用save方法保存就可以了,無(wú)論是單表,一對(duì)多,還是多對(duì)多
# 如果增加數(shù)據(jù)
# form = Test(request.POST)
# if form.isvalid():
# form.save()
# 這樣就可以直接保存
# 如果編輯數(shù)據(jù),用下面的方法就可以把當(dāng)前的對(duì)象的值渲染到form表單中,無(wú)論是單表,一對(duì)多,還是多對(duì)多
# obj = models.Article.objects.all().first()
# form = Test(instance=obj)
# 上面是實(shí)現(xiàn)渲染數(shù)據(jù)到form表單
# form = Test(request.POST,instance=obj)
# if form.isvalid():
# form.save()
# 這個(gè)就是實(shí)現(xiàn)更新操作,和增加操作唯一的區(qū)別就是通過(guò)instance傳遞一個(gè)要編輯的對(duì)象進(jìn)去就可以了

簡(jiǎn)單的用了一下model_forms,覺(jué)得還是不是很好用
我是用書(shū)、出版社,作者三張表來(lái)做這個(gè)聯(lián)系
首先下面這個(gè)函數(shù)是用來(lái)展示書(shū)籍信息
def test_models(request):
method = request.method.lower()
if method == "get":
body_list = []
obj = models.Book.objects.all()
head_list = models.Book._meta.get_fields()
for i in obj:
temp = []
temp.append(i.bid)
temp.append(i.title)
temp.append(i.publish)
temp.append(i.auther.all())
body_list.append(temp)
return render(request,"modelform_html1.html",locals())
else:
pass
下面這個(gè)類(lèi)就是modelform的類(lèi)
class test(ModelForm):
class Meta:
model = models.Book
fields = "__all__"
labels = {"title":"書(shū)籍的名稱(chēng)","auther":"作者","publish":"出版社"}
error_messages = {
"title":{"required":"不允許為空",
"invalid":"格式錯(cuò)誤"
}
}
widgets = {
"title":wd.TextInput(attrs={"placeholder":"密碼"})
}
field_classes = {
"title":forms.EmailField
}
下面這個(gè)函數(shù)是用來(lái)處理處理添加書(shū)籍的操作
def add(request):
method = request.method.lower()
if method == "get":
model_form_obj = test()
for i in model_form_obj:
print(i.label_tag(),"----------------------")
return render(request,"modelfrom_add.html",locals())
else:
model_form_obj = test(request.POST)
if model_form_obj.is_valid():
model_form_obj.save()
return redirect("/app2/test_models/")
else:
print("出錯(cuò)了")
model_form_obj = test(request.POST)
return render(request, "modelfrom_add.html", locals())
下面這個(gè)函數(shù)是用來(lái)處理編輯書(shū)籍的
def edit(request):
method = request.method.lower()
book_obj = models.Book.objects.get(bid=int(request.GET.get("id")))
if method == "get":
model_form_obj = test(instance=book_obj)
return render(request,"modelfrom_add.html",locals())
else:
model_form_obj = test(request.POST,instance=book_obj)
model_form_obj.save()
return redirect("/app2/test_models/")
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
構(gòu)建可視化?web的?Python?神器streamlit
這篇文章主要介紹了構(gòu)建可視化web的Python神器streamlit,Streamlit是一個(gè)用于機(jī)器學(xué)習(xí)、數(shù)據(jù)可視化的Python框架,它能幾行代碼就構(gòu)建出一個(gè)精美的在線app應(yīng)用2022-06-06
Python中Django框架下的staticfiles使用簡(jiǎn)介
這篇文章主要介紹了Python中Django框架下的staticfiles使用簡(jiǎn)介,staticfiles是一個(gè)幫助Django管理靜態(tài)資源的工具,需要的朋友可以參考下2015-05-05
使用python將請(qǐng)求的requests headers參數(shù)格式化方法
今天小編就為大家分享一篇使用python將請(qǐng)求的requests headers參數(shù)格式化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
超級(jí)詳細(xì)實(shí)用的pycharm常用快捷鍵
本文詳細(xì)總結(jié)了Pycharm的常用快捷鍵,下文介紹使用方法和場(chǎng)景, 并不需要記憶這些快捷鍵, 你只需要知道有這些快捷鍵, 再需要用的時(shí)候查看一下, 用的多了自然也就記住了,需要的朋友可以參考下2021-05-05
Python Numpy教程之排序,搜索和計(jì)數(shù)詳解
這篇文章主要為大家詳細(xì)介紹了Python?NumPy中排序,搜索和計(jì)數(shù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-08-08

