一个Django的弹出字段,可以通过弹出窗口创建\更新\删除外键和MyTyMyFielfield实例。

django-popup-field的Python项目详细描述


##django弹出字段
django的弹出字段,可以通过弹出窗口创建"pdate""pdate""elete""foreignkey""和"manytomanyfield"实例。


[弹出窗口.yinkh.top](http://popup.yinkh.top)

![弹出式演示](https://www.yinkh.top/media/summer_u note/20180515-170605-512.gif)


\todo
-国际化
-优化表单中的操作
-css override

\quickstart

1。使用pip安装"django popup field":

pip安装django popup field

2。将依赖项"django popup field"安装到项目的"settings.py"中的"installed\u apps":


installed\u apps=[

'popup\u field',

]
3。假设我有一个post应用程序,"models.py"是:


class category(models.model):
name=models.charfield(max_length=255,verbose_name=name')






class tag(models.model):
name=models.charfield(max_length=255,verbose"name="name')






class post(models.model):
title=models.charfield(max_length=255,verbose"name="title')
category=models.foreignkey('post.category',related_name="post_category',on_delete=models.cascade,
verbose"name="category')
tags=models.manytomanyfield('post.tag',
verbose"name="tags')



post app中的新"popups.py",内容是:

from popup_field.views import popupcrudviewset


from.models import*



class categoryform(forms.modelform):
class meta:
model=category
fields=['name']



classtag form(forms.modelform):
类元:
模型=标记
字段=['name']



class categorypoppupcrudviewset(popupcrudviewset):
模型=类别
表单=categoryform
模板名称创建='popup/create.html'
模板名称更新='popup/update.html'

更改"forms.py"中使用的类别和标记的小部件:

from django import forms
from.popups import categoryppopupcrudviewset,tagpopupcrudviewset

from.models import*




class postform(forms.modelform):


class meta:
model=post
fields=['title','category',"tags"]
widgets={
"category":categorypoppupcrudviewset.get_fk_popup_field(),
"tags":tagpopupcrudviewset.get_m2m_popup_field(),
}

5。自定义弹出模板"popup/create.html":

{%extends"popup/base.html"%}
{%block css%}
{%endblock%}

{%block js%}
{%endblock%}
{%block main%}
<;div class="layui container"style="margin:4px">;
<;form class="layui form"enctype="multipart/form data"
操作={{{request.path}}{%if to_field%}?to_field={{to_field}{%endif%}"
method="post">;

{%csrf_token%}
{{form.media}
{{form}


<;div class="layui form item">;
<;div class="layui input block">;
<;button class="layui btn">;添加<;/button>;
<;/div>;
<;/div>;
<;/form>;
<;/div>;
{%endblock%}

`popup/update.html`:

{%extends"popup/base.html"%}

{%block css%}
{%endblock%}

{%block js%}
{%endblock%}

{%block main%}
<;div class="layui container"style="margin:4px">;
<;form class="layui form"enctype="multipart/form data"
操作={{{request.path}}{%if to_field%}?tou field={{tou field}{%endif%}"
method="post">;
{%csrf@token%}
{{form.media}
{{{form}


<;div class="layui form item">;
<;div class="layui input block">;
<;button class="layui btn">;编辑<;button>;
<;div>;
<;div>;
<;表单>;
<;div>;
{%endblock%}

`模板中的object_name总是"popup"。关键是必须将{%if附加到_field%}?表单操作中的to_field={{to_field}{%endif%}`或保持设置为`{{request.path}{%if to_field%}?to_field={{to_field}{%endif%}"`.
6。弹出式菜单create\update\delete的所有URL都由"popupcrudviewset"、"url.py"生成:


from.views import*

path('',post create view.as_view(),name='post_create'),

categorypoppupcrudviewset.url(),
tagpopupcrudviewset.url(),
]


这将注册以下URL:

path('category/',include([
path('popup/',cls.create(),name='category_popup_create'),
path('popup/<;int:pk>;/',cls.update(),name='category_popup_update'),
path('popup/delete/<;int:pk>;/',cls.delete(),name='category_popup_delete'),


path('tag/',include([
path('popup/',cls.create(),name='tag_popup_create'),
path('popup/<;int:pk>;/',cls.update(),name='tag_popup_update'),
路径('popup/delete/<;int:pk>;/',cls.delete(),name='tag_popup_delete'),
]

` template_name_update是用于更新弹出窗口的模板。

=如果"popupcrudviewset"中没有特殊分配,"popupcrudviewset"中的"popupcrucreateview"和"popupdupupdateview"的"popupcrudviewset"覆盖模板


categorypoppupcrudviewset(popupcrudviewset):

模板名创建='popup/create.html'
模板名更新='popup/update.html'


类标记popupcrudviewset(popupcrudviewset):

模板名创建='popup/create.html'
template_name_update='popup/update.html'



\第一个是:

class popupcrudviewset(对象):

template_name_fk='popup/foreign_key_select.html'
template_name_m2m='popup/many_many_select.html'
第二个是:

class postform(forms.modelform):


classmeta:
model=post
字段=['title','category','tags']
widgets={
"category":categorypoppupcrudviewset.get_fk_popup_field(template_name='popup/foreign_key_select.html')
"tags":tagpopupcrudviewset.get_m2m_popup_field(template_name='popup/many_to_many_select.html'),
}


isstaffusermixin(accessmixin):
"
请求必须是staff
""
引发异常=真
权限被拒绝'u消息='您不是staff'

def dispatch(self,request,*args,**kwargs):
如果不是请求。用户是staff:
return self.handle_no_permission()
返回super(isstaffusermixin,self).dispatch(请求,*args,**kwargs)


class categoryppopupcrudviewset(popupcrudviewset):
model=category
form\class=categoryform
parent\u class=isstaffusermixin

model=tag
form\class=tagform
parent\u class=isstaffusermixin

为"popupcreateview"设置公共权限检查。在演示中,我们将检查操作员是否是员工。


然后相应的按钮将被隐藏,相应的视图将在操作时询问此权限。

如果要检查弹出字段的权限,演示在这里:

`popups.py`应该是:


class categoryppopupcrudviewset(popupcrudviewset):
model=category
form=categoryform
template\u name\u create='popup/create.html'
template\u name\u update='popup/update.html'
所需权限={
"创建":('post.add_category',),
"更新":('post.update_category',),
"删除":('post.delete_category',)
}



`views.py`应该是:


=true
表单类=post form
模板名=post/create.html
成功URL=反向延迟('post\create')

self).get_form_args()
kwargs['request']=self.request
return kwargs

**kwargs:
请求=kwargs.pop('request')
超级(postform,self)。\uu init(参数,**kwargs)
self.fields['category'].widget.request=request
self.fields['tags'].widget.request=request



=categoryform
context\u for戋create={operation':'create'}
context\u for戋update={operation':'update'}

您可以使用:


Class CategorypPopupCrudViewSet(PopupCrudViewSet):
Class\u Verbose\u name='Custom Category'


默认URL名称为'Model name's lower case+\u Popup\u+operation',您可以自定义'model name's lower case':

class categorypoppucrudviewset(popupcrudviewset):
class_name='custom_category'


v 0.1.0
-获取create銆20093;pdate并删除到viewset

v 0.1.1
-添加gif以及演示网站


35 35 35 \35 \\35 \35 \ \ \\35\\35 \35 \ 35 \35 \35 35 \35 \\丳opup_template_name_update in setting
-添加在popupcrudviewset中template_name銆fk乼emplate_name_m2m
-在popupcrudviewset中添加父类


弹出窗口标题和url名称

\v 0.1.6
-为popupcrudviewset中的所有内容添加上下文

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于java的原因,maven无法运行代码。lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge   Android项目中的java Creative SDK图像编辑器UI   java如何在Android Studio中使用DataOutputStream上传文件并将其他参数传递到web服务器   java倒计时服务打开时崩溃   java将RubyonRails项目转换为JRubyonRails项目   java我的图库意图是不显示图像?为什么?   java如何在春季启动时跳过mongodb/   java@Autowired在Spring中是如何实现的   甲骨文Akka java。util。同时发生的timeoutexception线程池频繁超时   java maven依赖项对spring启动应用程序有何影响?   java Firestore执行复合查询,未截获事件“已修改”   java ItemStreamException:未能初始化读取器,原因是:IllegalStateException:流已初始化。重新开放前关闭   java将空标记解组到集合的新实例中   使用AspectJ的java新手:无法调用aspect   java查找棋类游戏的所有组合   你为什么要这样做and==与Java中的equals方法不一样吗?   如何对使用JavaUUID的代码进行单元测试?