stark组件4_pop功能-创新互联
pop功能模仿Django-Admin中添加页面的pop功能
为汕城等地区用户提供了全套网页设计制作服务,及汕城网站建设行业解决方案。主营业务为成都做网站、网站建设、汕城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!pop功能需要实现的功能和问题
1 如何在一对多和多对多字段后渲染 +
2 +对应的跳转路径是什么
3 保存添加记录同时,将原页面的对应的下拉菜单中添加该记录
具体实现(只在添加页面实现功能)
添加页面代码逻辑(包含pop功能):
此处请参考ModleForm相关内容
def add(self, request):
#ModelFormDemo等同于得到了DemoModelForm这个类
ModelFormDemo = self.get_modelForm()
#实例化出来一个form对象
form = ModelFormDemo()
#通过循环判断没有个字段类是否是判断form对象是否是一对多或多对多,并做相应处理
for bfield in form:
from django.forms.models import ModelChoiceField
#ModelMultipleChoiceField继承ModelChoiceField,因此一对多和多对多都是ModelChoiceField
#如果当前对象是一对多或多对多
if isinstance(bfield.field, ModelChoiceField):
#添加一个属性,用于在模板中判断是否渲染页面时加上加号
bfield.is_pop = True
# print("====>",bfield.field.queryset.model)
# == == > < class 'app01.models.Publish'>
# == == > < class 'app01.models.Author'>
#获取app名字和关联表的名称
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 /
#构建url值,这个值要传给模板用
bfield.url = _url+"?pop_res_id=id_%s" %bfield.name
#bfield.url == > / stark / app01 / author / add /?pop_res_id = id_authors
# 如果收到POST请求则修改数据
# 这里有两种情况,一种是通过pop添加数据,此时url带有pop_res_id,一种是在查看页面点添加,url里是没有pop_res_id的
if request.method == "POST":
#将request.POST放到form中进行校验
form = ModelFormDemo(request.POST)
if form.is_valid():
obj = form.save()
# print("obj==>", obj)
#obj==> Django 第二版
# print("type==>", type(obj))
#type==>
#获取(pop功能提交的post请求时)url中的pop_res_id值
pop_res_id = request.GET.get("pop_res_id")
#如果此处有值就将数据返回给pop.html页面
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: #如果此次无值则直接跳转到相应页面
return redirect(self.get_list_url())
# return redirect("/stark/app01/book/")
return render(request, "add.html", locals())
添加页面渲染(form.html)
pop页面
Title
add页面body示例代码(是pop页面的父页面)
添加数据
{% include 'form.html' %}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站名称:stark组件4_pop功能-创新互联
本文链接:http://pwwzsj.com/article/pgsep.html