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-06Python中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-05Python Numpy教程之排序,搜索和計(jì)數(shù)詳解
這篇文章主要為大家詳細(xì)介紹了Python?NumPy中排序,搜索和計(jì)數(shù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-08-08