pop功能模仿Django-Admin中添加頁(yè)面的pop功能
成都創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、赫山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為赫山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1 如何在一對(duì)多和多對(duì)多字段后渲染 +
2 +對(duì)應(yīng)的跳轉(zhuǎn)路徑是什么
3 保存添加記錄同時(shí),將原頁(yè)面的對(duì)應(yīng)的下拉菜單中添加該記錄
此處請(qǐng)參考ModleForm相關(guān)內(nèi)容
def add(self, request):
#ModelFormDemo等同于得到了DemoModelForm這個(gè)類
ModelFormDemo = self.get_modelForm()
#實(shí)例化出來(lái)一個(gè)form對(duì)象
form = ModelFormDemo()
#通過循環(huán)判斷沒有個(gè)字段類是否是判斷form對(duì)象是否是一對(duì)多或多對(duì)多,并做相應(yīng)處理
for bfield in form:
from django.forms.models import ModelChoiceField
#ModelMultipleChoiceField繼承ModelChoiceField,因此一對(duì)多和多對(duì)多都是ModelChoiceField
#如果當(dāng)前對(duì)象是一對(duì)多或多對(duì)多
if isinstance(bfield.field, ModelChoiceField):
#添加一個(gè)屬性,用于在模板中判斷是否渲染頁(yè)面時(shí)加上加號(hào)
bfield.is_pop = True
# print("====>",bfield.field.queryset.model)
# == == > < class 'app01.models.Publish'>
# == == > < class 'app01.models.Author'>
#獲取app名字和關(guān)聯(lián)表的名稱
related_model_name = bfield.field.queryset.model._meta.model_name
related_app_lable = bfield.field.queryset.model._meta.app_label
#利用反向解析找到url
_url = reverse("%s_%s_add" % (related_app_lable, related_model_name))
# print(_url)
# / stark / app01 / publish / add /
# / stark / app01 / author / add /
#構(gòu)建url值,這個(gè)值要傳給模板用
bfield.url = _url+"?pop_res_id=id_%s" %bfield.name
#bfield.url == > / stark / app01 / author / add /?pop_res_id = id_authors
# 如果收到POST請(qǐng)求則修改數(shù)據(jù)
# 這里有兩種情況,一種是通過pop添加數(shù)據(jù),此時(shí)url帶有pop_res_id,一種是在查看頁(yè)面點(diǎn)添加,url里是沒有pop_res_id的
if request.method == "POST":
#將request.POST放到form中進(jìn)行校驗(yàn)
form = ModelFormDemo(request.POST)
if form.is_valid():
obj = form.save()
# print("obj==>", obj)
#obj==> Django 第二版
# print("type==>", type(obj))
#type==>
#獲?。╬op功能提交的post請(qǐng)求時(shí))url中的pop_res_id值
pop_res_id = request.GET.get("pop_res_id")
#如果此處有值就將數(shù)據(jù)返回給pop.html頁(yè)面
if pop_res_id:
res = {"pk": obj.pk, "text": str(obj), "pop_res_id": pop_res_id}
return render(request, "pop.html", {"res": res})
else: #如果此次無(wú)值則直接跳轉(zhuǎn)到相應(yīng)頁(yè)面
return redirect(self.get_list_url())
# return redirect("/stark/app01/book/")
return render(request, "add.html", locals())
Title
添加數(shù)據(jù)
{% include 'form.html' %}