一个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 BasicDataSource提交不起作用   java如何在SpringSecurity中为特殊情况下的身份验证失败定制http状态代码?   java Hibernate,SQL Server 2016=SQL错误:207无效列名   继承确保运行时Java超类是正确的   java重写hashcode方法以返回类中变量的hashcode   java无法缩放不同设备的文本大小   java Comparator作为静态字段接口还是实现?   java MessageSource不重新加载属性文件   使用方法setToolTip()在中更改后,操作上的java Keybinding工具提示消失   java使用maven添加调试符号   java转换时应该绑定哪个版本的JRE。使用launch4j将jar转换为exe   java Anylogic实验坚持使用范围内的可变参数,但在自由形式参数中工作良好   关于BuffereImage和Image的java问题   java当我试图在终端的Applications文件夹中显示内容时,我得到了“chromeapps.localized”   java如何使用正则表达式模式拆分字符串   java如何计算重复联系人数   java真的不可能保护Android应用免受逆向工程的影响吗?   java无法将值从活动转移到存储库以将其传递到Dao方法   Java中的名称空间包相对标识符路径   排序Java添加和排序列表的快速方法