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è)類就是modelform的類
class test(ModelForm):
class Meta:
model = models.Book
fields = "__all__"
labels = {"title":"書(shū)籍的名稱","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)文章
使用tensorflow實(shí)現(xiàn)AlexNet
這篇文章主要為大家詳細(xì)介紹了使用tensorflow實(shí)現(xiàn)AlexNet,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
解決python 出現(xiàn)unknown encoding: idna 的問(wèn)題
這篇文章主要介紹了解決python出現(xiàn) unknown encoding: idna 的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python實(shí)現(xiàn)微信消息防撤回功能的實(shí)例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)微信消息防撤回 ,需要的朋友可以參考下2019-04-04
使用Python構(gòu)建Markdown轉(zhuǎn)Word文檔轉(zhuǎn)換器
在當(dāng)今的文檔處理中,Markdown因其簡(jiǎn)潔的語(yǔ)法和易讀性而廣受歡迎,而Microsoft Word(DOCX格式)則因其廣泛的兼容性和專業(yè)的排版效果成為商業(yè)文檔的標(biāo)準(zhǔn),本文將介紹如何使用Python構(gòu)建一個(gè)帶有圖形界面的Markdown轉(zhuǎn)Word文檔轉(zhuǎn)換器,需要的朋友可以參考下2025-02-02
python自動(dòng)腳本的pyautogui入門學(xué)習(xí)
這篇文章主要介紹了python自動(dòng)腳本的pyautogui入門學(xué)習(xí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Django 通過(guò)JS實(shí)現(xiàn)ajax過(guò)程詳解
這篇文章主要介紹了Django 通過(guò)JS實(shí)現(xiàn)ajax過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python實(shí)現(xiàn)執(zhí)行Shell命令并獲取輸出
這篇文章主要介紹了如何借助?os.system()?從?Python?腳本執(zhí)行?cmd?命令,以及如何借助?Python?中的?subprocess?模塊以更簡(jiǎn)單的方式從腳本執(zhí)行?cmd?命令,感興趣的小伙伴可以了解下2023-10-10

