From 3f049440b7b4efed77c3d1bc42098b1647414515 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 8 Aug 2018 13:10:58 +0800 Subject: [PATCH 1/6] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=BC=95=E8=B5=B7=E7=9A=84=E5=88=9B=E5=BB=BA=E5=A4=96?= =?UTF-8?q?=E9=94=AE=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/perms/models.py b/apps/perms/models.py index 89f09764e..204141c33 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -88,5 +88,4 @@ class NodePermission(OrgModelMixin): return "{}:{}:{}".format(self.node.value, self.user_group.name, self.system_user.name) class Meta: - unique_together = ('node', 'user_group', 'system_user') verbose_name = _("Asset permission") From 2354f0c97006c8ede76b4af5f176231273f307fc Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 10 Aug 2018 17:11:17 +0800 Subject: [PATCH 2/6] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=89=B9=E9=87=8F=E7=A6=81=E7=94=A8=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index 36639a17e..48e778eac 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -20,7 +20,7 @@ class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer): model = Asset list_serializer_class = BulkListSerializer fields = '__all__' - # validators = [] # If not set to [], partial bulk update will be error + validators = [] # If not set to [], partial bulk update will be error def get_field_names(self, declared_fields, info): fields = super().get_field_names(declared_fields, info) From bb6394150d6dd59f7df908826a90d2e4b7976a61 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sun, 12 Aug 2018 15:52:16 +0800 Subject: [PATCH 3/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E8=B5=84=E4=BA=A7=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset.py | 2 +- apps/users/serializers.py | 3 ++- requirements/requirements.txt | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index 48e778eac..a3661db5c 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -20,7 +20,7 @@ class AssetSerializer(BulkSerializerMixin, serializers.ModelSerializer): model = Asset list_serializer_class = BulkListSerializer fields = '__all__' - validators = [] # If not set to [], partial bulk update will be error + validators = [] def get_field_names(self, declared_fields, info): fields = super().get_field_names(declared_fields, info) diff --git a/apps/users/serializers.py b/apps/users/serializers.py index 21103c6a8..9f99c0171 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -23,6 +23,7 @@ class UserSerializer(BulkSerializerMixin, serializers.ModelSerializer): 'first_name', 'last_name', 'password', '_private_key', '_public_key', '_otp_secret_key', 'user_permissions' ] + # validators = [] def get_field_names(self, declared_fields, info): fields = super(UserSerializer, self).get_field_names(declared_fields, info) @@ -71,7 +72,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer): class UserGroupUpdateMemeberSerializer(serializers.ModelSerializer): - users = serializers.PrimaryKeyRelatedField(many=True, queryset = User.objects.all()) + users = serializers.PrimaryKeyRelatedField(many=True, queryset=User.objects.all()) class Meta: model = UserGroup diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 4373a83da..ba44a9281 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -14,11 +14,11 @@ coreapi==2.3.3 coreschema==0.0.4 cryptography==2.1.4 decorator==4.1.2 -Django==2.0.7 +Django==2.1.0 django-auth-ldap==1.3.0 django-bootstrap3==9.1.0 django-celery-beat==1.1.1 -django-filter==1.1.0 +django-filter==2.0.0 django-formtools==2.1 django-ranged-response==0.2.0 django-redis-cache==1.7.1 From d97e606503bd965a0e182a8d272a976c60230045 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 13 Aug 2018 11:02:00 +0800 Subject: [PATCH 4/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9django?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index ba44a9281..3c23aba2b 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -14,7 +14,7 @@ coreapi==2.3.3 coreschema==0.0.4 cryptography==2.1.4 decorator==4.1.2 -Django==2.1.0 +Django==2.1 django-auth-ldap==1.3.0 django-bootstrap3==9.1.0 django-celery-beat==1.1.1 From c9d137bc209ab745c1765d25de64a072b0561e65 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 13 Aug 2018 11:44:44 +0800 Subject: [PATCH 5/6] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9Mixin=EF=BC=8C?= =?UTF-8?q?=E5=85=81=E8=AE=B8org=5Fid=E4=B8=8D=E5=A1=AB=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/orgs/mixins.py | 2 +- apps/users/serializers.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/orgs/mixins.py b/apps/orgs/mixins.py index 99140f40b..e613c81ef 100644 --- a/apps/orgs/mixins.py +++ b/apps/orgs/mixins.py @@ -55,7 +55,7 @@ class OrgManager(models.Manager): class OrgModelMixin(models.Model): - org_id = models.CharField(max_length=36, null=True, blank=True) + org_id = models.CharField(max_length=36, null=True, blank=True, default=None) objects = OrgManager() def save(self, *args, **kwargs): diff --git a/apps/users/serializers.py b/apps/users/serializers.py index 9f99c0171..bef37d91f 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -65,6 +65,7 @@ class UserGroupSerializer(BulkSerializerMixin, serializers.ModelSerializer): model = UserGroup list_serializer_class = BulkListSerializer fields = '__all__' + read_only_fields = ['id', 'created_by'] @staticmethod def get_users(obj): From 75e67410cf88175f0061edd8f97b3309024998ab Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 13 Aug 2018 15:01:56 +0800 Subject: [PATCH 6/6] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E8=B5=84=E4=BA=A7=E5=92=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/views/asset.py | 29 +---- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 37226 -> 37866 bytes apps/i18n/zh/LC_MESSAGES/django.po | 186 +++++++++++++++++++---------- apps/orgs/mixins.py | 9 +- apps/orgs/utils.py | 7 +- apps/users/forms.py | 8 +- apps/users/views/user.py | 7 +- requirements/requirements.txt | 1 + 8 files changed, 141 insertions(+), 106 deletions(-) diff --git a/apps/assets/views/asset.py b/apps/assets/views/asset.py index 4b0387e36..eb9972e94 100644 --- a/apps/assets/views/asset.py +++ b/apps/assets/views/asset.py @@ -9,6 +9,7 @@ import chardet from io import StringIO from django.db import transaction +from django.contrib import messages from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView, ListView, View from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView @@ -76,14 +77,6 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): template_name = 'assets/asset_create.html' success_url = reverse_lazy('assets:asset-list') - # def form_valid(self, form): - # print("form valid") - # asset = form.save() - # asset.created_by = self.request.user.username or 'Admin' - # asset.date_created = timezone.now() - # asset.save() - # return super().form_valid(form) - def get_form(self, form_class=None): form = super().get_form(form_class=form_class) node_id = self.request.GET.get("node_id") @@ -106,29 +99,12 @@ class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): return create_success_msg % ({"name": cleaned_data["hostname"]}) -# class AssetModalListView(AdminUserRequiredMixin, ListView): -# paginate_by = settings.DISPLAY_PER_PAGE -# model = Asset -# context_object_name = 'asset_modal_list' -# template_name = 'assets/_asset_list_modal.html' -# -# def get_context_data(self, **kwargs): -# assets = Asset.objects.all() -# assets_id = self.request.GET.get('assets_id', '') -# assets_id_list = [i for i in assets_id.split(',') if i.isdigit()] -# context = { -# 'all_assets': assets_id_list, -# 'assets': assets -# } -# kwargs.update(context) -# return super().get_context_data(**kwargs) - - class AssetBulkUpdateView(AdminUserRequiredMixin, ListView): model = Asset form_class = forms.AssetBulkUpdateForm template_name = 'assets/asset_bulk_update.html' success_url = reverse_lazy('assets:asset-list') + success_message = _("Bulk update asset success") id_list = None form = None @@ -150,6 +126,7 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView): form = self.form_class(request.POST) if form.is_valid(): form.save() + messages.success(request, self.success_message) return redirect(self.success_url) else: return self.get(request, form=form, *args, **kwargs) diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index ddd5c36d3a0ae95010f6b3c4c418c3a032e78c8a..97879c6d07121799ee285171697bc8b519a47acb 100644 GIT binary patch delta 13074 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

bqN4oF9ihm_nvCyo!g3?$o_W949^`&(9*R zQVvI5Kd8TzCsWQxIf$wYl=~9{)QKxEalu#O^GAIU{ZcR&;k(M1#cZ(V-i2Ug4+9J9}!;=`X4cL`C)nD3Q>Yt;%13tYf*a9}vr-AiT z+il8`!~>!XafrGJ`c`gZH#{AnAC0;u5?v{uBN`L0S$#SBhg1HW_=Y}BtbRT|){R^} zi5cYch$IxN8`^4Bq1 z3&17N3v=Unq6YO@@i*$8BXoU<6NwPr!!?&^OZgfWrT!nH2hmXHUx$V$l4UgZ!Lr0^ z%3X-(DeHQhC`hC#;aW&kA*vH+i3~zleh;TEW45$=FIn9+^7_=D!UXCX5tCe!8bo;- zW@B^WOS|Dm3?kQ6$y{fS!u>=s+FtSX@P15wru@Ll&FEK^@zcqRTiqk-ekAn%Infm6 z64wb`9dQj2M>O!Ne1GycVUSDIbs+Xy{XNPHC~wC*L>6Kj`BH12Zbo1mq9Re5KAVYd zS(tw+6_G?~A_o&p!H&e!>pF$E>8vXPM-r=vBILD+7l~)DeYE9b99^R+|ALjstKvd( zU59YJugvpLr|>HgV>hY83&dDrCsCP*^>wDe6-c>0QI!5aTm2y1L0c1F4?fc5t!V$7 z{8u8o^;2^c_0QvYB0%S_tAtJdgmOP$4S(!fTS>D4eF{>}PgJxzb&Vmq5^qqqllX%8 zi9DJp@Jv5aCzdEh-B*M^Xr%!k55e*7&B^M{OCauV^RmDWHxS;=2s{w zWr))(WsoW<#wR9Bh##Ghlo*k@yGgI$@-%ix84@vY(CGMt5x(Mxgw)Y0{9jKcshMHz zns~Ekw(b<4BP&B?uIl|pK=zsu)oa(URy{MOf4A&Gmo~j~Y5vR$uP@1%pRg<|W|khd z+&}p8wi$oyT6=N!{0nndWNb~$m$@}@v0uJRyJuY5Jl4JYC){4Rsz42pA{gP0gkPTjY>;CSf>E z#XwwX^(|PKdC|3Bgbdz*1&;%t>AYwUCyW4ZCA;9Ev4z zF^<3k*b>WEcAQo?-MoOR$5wHiip=j!rs0QsP+N2Wweq`|3!kDU%JHgJ>^Kpq{zWh= zmc;B>0mHBk>iUjW?~Cd;8Z}O`ou7xU?r;SS4X_@w;7-&92T?n662tLl)H8mH`7oFV zt49=#xv?B-;>M_P+u8XZsD<}O?cfm9Jd>)j{}D81QP7rdK;AEBH)`OU*6}{-j-R6L zz$d{wp9A&ia--gfNYubZP!mOC9;|NX+u8Y!X72>{Ul$Cu!Z_4Rl#DzkXEtgfU!o>D zfm-NURKM#OgMXs#FtVC==S5KqjzL{l-b}!{Wny@+QQFTJyxI2=DCUQ{|%tm!whWc2o zM-8yo@)M{DuUP#y>RG=)Ej*xxx4>XbdlaahiAIfE7PY|YUhX>eX=uPUs5|S18gRIo zgt}llY9Vt`6Rkq++(y)=WDn|5okWdy7Ipp?RQ*2cy2q&TG9>Ccm&s_PeXKBT#i#{D zV?nHh5!fEpZwzX{B-G9&qZTj^HSt>11Y5Bb?y>wj>Yex#_2?d8N#=I~YI*~eLk(OL zwG$0c3wa&2@?NNc2ci0nLOrr1tEZqQScvNX9;)9e)Iv94LEMQN=RCUV_zMlK{08cR zhn7Dxv()mQT_|dx!l*|Pi`wFvsBv1Np7HCbo$7=6aUg1EXP_pYkJ_yKIeoO#u}gIdsIR6lKNAqc{Z z%z@xbacQ$GYNsos zZm14s(&xVs4ZX#!P!se(y|trJpZf(EiK*syn1%c=)T4QZ8rY|iw{zK1^>9?bf~XrQ zg}SkLJ6{I_^!aZ{Ln~^7T5$(d$L^>*e*^XBb_(ik{s1%KDh$Als7JOPwIhd6J8>4( z?;2_Ww~;M(9$NihbajDGV{ZYWs0D>Xf?DWm%eSF! z;2YFCb=mZ3;?;|xcD!N}_FvDw9tGJ0wG*y61+|b_s2x~ zA!Y&0M!h%&VmZ`~)IcquepB{e6SSkCXVne0r30+PC@f1p6?I3uP!kusPX)oc{>_}`XLgAT0jhH$11usbZ7NZTi*k-V}I0&$D%&BQ!obKv-)vVzaOv! zUPoOY)SRzh3`3nCW==#c>}}M-7h*iR8?3`6)EB~Sj6&ZQj#B{RP9f*1~V^DWK%Uprjj>BM_in?worv3h3OGD3QBi6>lsFyKIEAQ&rHRI{?znX?RY(hPwZKxIRLA~W)qITd< z)IuMkUecg8UOk^#$Si?rFBxi~6;ba6EDW+tE7>-1ZlVUDw%l_+vO%(J^wGTt^3KqeK zs2?Qx+Ob_Y8jIsCEQ7h)ds|!69DsUc3$P;Y#me|M>XDS;v#AADKs~}&T^f^U)Wz+1 z6!nbV4&Jj{g1TTG>brjv>SOpZYQR*~4(>rc>!YYg@B`}6UPV3H8yJeuF&~C-SGsXG zhK2@6L~UVH%#GbpTRj#v@HAAvMW`)Yg&H8$@*}8c{yl03vvl&ti$L{{LoF;3bzKwW z23)6$*Kqovp5+kK9gjs_FafoYnW#Hhf?CiP)DC=(x}zhgE&UnQ|0edr$5!vs*&DAv z>iSU_ufP9OXlRRep$7N{^>&^^t@IDnBYA?llaManKt)jtjzvva1vO56)C3*v`~cL> zjzleVI%?cin9HTHjfUR#V;F&_QJ;c)s5^dy8ZcW|ZvpvH=c7>1xGZWXDx>-(q88E| zHEvJTqZ@?U(Q&ASPeoT-{SFOvScn>MCF(cYdTfBlQ7aGa=1mZb>Q@~nV_mC%g<8mY zY?6Ub5soE~>ESqU;d(qmJ*ubU{15NuvE0D|}`iKt1admS3{`rsYpi6KC%4 z8Dxf;1yB#VU8TfKsF1hvxBmY=u$I%wi0oeox*hnje)<(te@b2l=ka{$#ZcBpqpwan(IfjgN!%>j0PxandL{Zi1? z9WA3F*P;ga1U119^DETWU9|iLs{b>qXBy_64>1d&t}kOInyu}8AJhWg7{>liS5_qc9tJ{BZVPD@n8yEv#cZ zvzOI}n`6z1sOzR#z8E#Z3UecdlkYUopl;-@`3Tkjxl2O>1&;6v;i!%!@D+@)ysg<8 zb5iexg>W=#prv+xE#@HKjM~9{RzHgBchd3;mb+K2a2GZ3Bh-ai__?EnDdM-t29TFejpJc(#|j&T<->XoGe5)bf2;iuw@@z`Is|g4$Z2k>2M$ z0ySX*>Km~kYG;yB3tnsIccB*kg?S2t^!fjhh8A!GHPJoP=l&_`Cs*hw&pcR$Jlt%E zHOR-ByRi=W6YPzNqrGuILM`xP%lG0^@(~<$$p=`z+58N(WqVL}blmEf zPy=5x?_2$a<^KHbO?!l>>++#)FxsqyX}|w#(a=B*&9-Jwa~S5~`~=j1i!EPa=XY3s z7&XyF)bEA6sQ!WDyzzt0NX$$(fF$49L{2A(P-)SC0 zJ>wrypYLB$*WI`Ce&fA=D+)thS9Lu5uRps@C}<(0Fc(h7v^zCd*!eY6QCnXgwSWdzZ;#sA;Z~oH8fXb>0c*?yR=!c?gd@ zg1itG(&xVhp$odB?o_`CK6rbCy3s_4l3V zT_1>9sW}m9U};o`N~nRVTiyWm?3-KO54C`ys0k*cu3L#3XT7-{wUdW17QeIHcam2R zL01D8rJ(^5a5C0L4RqA}-p>Dm8t@OSfRF8bEI;nGpaj&%vpH(q@u+bZnD3b@F>Rr5 z+2?;d1r2b>PMk%3Q(ZOhn2$|gR;h&qp>`_LENRA@38)3sLrvJ!>|pkt%>HZQkye;) zE=1K=TD}c6;X%t!qXxc=y3^~}7hhQ3H`%LCLM`xJRR7heg={o;y4E;io;EL=x6H?w zz=i%(JZqx{dvY8>cp5`+z%1|lMAVMVMn7DD8S!1KufVi_|6fBRkP|ym6CFlfcmlPs z@6BuG1Jn-qrFawNLG>$!s+YHVeY1_(-5g@RnPQ*+85Bx#;UYV+A2rZ7mj7(tMosiD zYM}wMJws3njxdXvQJ9r_JZiiesOwu{X6!MW{ntPPDQJsEp`PiRI00v)2FN8YkJ#&oNh^K0RA3KaA>k1~u*_*BUob1O0=VAnrK!DGmwA5f6OAZxUW>OBZm(!=1X~c z{Q|Y@oQt)>T=Ej>Cry5tJCCU!C#ul*FMa;++sP3W(~pxhh7v(^T87&C+nj%&*hG6R zeog4(tK)Ct3Gt9vPkjlY|3}ps@&UBR5&HJLPAnvf6Z|6Mw*x11EW*rOkO}t^{I@Wt z57EfZtB;Q2^w~)5bs{HGooGhrh{4*}9sjXf0h~#cr=EdpC(vF@dldSUr{93Hn?m~0 znFb$m=X)!3z;`(RKg+Yy-cP#)QItp}-Y4{t`hjx=88|1QFR@)V?m4_ozLe0>)Wc2t zhrutclWGO6otO41Yj=C;{2kgQ8C+kXxoAh&x!1_wATAQ$T5TiQSV1mXbgN*IY{iSk_c8}6YtoTyHF5+27l zF^)(-is||POO&J%Xw{bFpVK}_Br;e>@}FooAPUod`S9huj;92F($kL8^qFk^N?{4> zvz7J_^!UK*miF%paXBcCx55Anuy%9mn}`(zpHOEfkx2Wq`7KK4n%}jwuX~wnI@Q&7 zMLVoObhCT~W+Ia4r{fStTH9esS7^sje~$m+E7Z!;Zbe)pDpEU)Iu_tQ%t4%?J>;b~ z*SSRT5RrcLrV-0vm5D#-+@3rhi;_RVdgN2F1u>eqMg9k|ndn0vKtEqBPv|&}bBK+! z>*JBMDsN768pEtpX)ek_dkZ!FP^(C;{i0O|HX_ z_Gz!_JV3rH)4oUbRXLwNaq1jP;|7Ht*w8LqqX*Xu0+zGB>niy z+R6Ahy@)%ARB9jE`3E?IxKAu5&J)k9e;De2z^F#(sD&R{JCiNE0yfacIzMrkPAQm? zs6(jFYuE$7Bi<#}kvGFJsK1a^@c$o)6n>`Oi};>cNj`@dMw}ybtRu?WBDjC=$PWn= z^AeH7a`N*;Ck81({sMLMA~w_h-10xk18Dz@l~Ffzir7Z}^6?3^hlGwTxB#pA*q@cg zB=1rDMrS#qh&I+)`McKcN4qcWWbCLDcD#p=s6QoqSZpxy9qnAy+hZ$SL<}NyTEuiHw??~v9YCR*N*b_$`RHnovn)9He3iC?KzAbQe{!ugn$#f6|B zxqenU@f7|h$wm|+j#1lAlqSv+QJgl}*T5H;zW8{2UH87?Klhyv7m<0R@j z<`PB7b%b(msI@y_CGtWqe>tnuKZs|7)Puk zw%PTnr5{^qd_=4S2{+(8ykWH|Skc<<8XB#Mfpm(-Y7E>MyOY<%mZ+mL5y-jX z)Y6Z^G+rliQO`sDYuYo@PnzRj>feQSC##pCJ(fR4&Oa1p5Y_BNHp$7oa2GQ&_$Aaa z-OP-^Ug^L8?4LS2?t%aOlu8#$7@yRpiLJ7x9&eK1pBmP>Z9wXn&Tso= ziY*vdp-NnAYWALOGtD14V18=wzy-dkr-#n)NgX+&eb&^B6Yuz?W|(>{bLwAn9{K(s DT*$!C diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po index 1ac62235c..1e4c69daa 100644 --- a/apps/i18n/zh/LC_MESSAGES/django.po +++ b/apps/i18n/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-10 16:10+0800\n" +"POT-Creation-Date: 2018-08-13 15:01+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -44,6 +44,7 @@ msgstr "节点管理" #: assets/forms/asset.py:116 assets/models/asset.py:85 #: assets/models/cluster.py:19 assets/models/user.py:73 #: assets/templates/assets/asset_detail.html:73 templates/_nav.html:25 +#: xpack/plugins/orgs/templates/orgs/org_list.html:18 msgid "Admin user" msgstr "管理用户" @@ -54,11 +55,13 @@ msgstr "管理用户" #: assets/templates/assets/asset_update.html:41 #: assets/templates/assets/asset_update.html:43 #: assets/templates/assets/user_asset_list.html:34 +#: xpack/plugins/orgs/templates/orgs/org_list.html:20 msgid "Label" msgstr "标签" #: assets/forms/asset.py:37 assets/forms/asset.py:76 assets/models/asset.py:76 #: assets/models/domain.py:47 assets/templates/assets/user_asset_list.html:168 +#: xpack/plugins/orgs/templates/orgs/org_list.html:17 msgid "Domain" msgstr "网域" @@ -116,6 +119,7 @@ msgstr "端口" #: terminal/templates/terminal/command_list.html:73 #: terminal/templates/terminal/session_list.html:41 #: terminal/templates/terminal/session_list.html:72 +#: xpack/plugins/orgs/templates/orgs/org_list.html:16 msgid "Asset" msgstr "资产" @@ -146,6 +150,9 @@ msgstr "资产" #: users/templates/users/user_list.html:23 #: users/templates/users/user_profile.html:51 #: users/templates/users/user_pubkey_update.html:53 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:52 +#: xpack/plugins/orgs/templates/orgs/org_list.html:12 +#: xpack/templates/orgs/org_list.html:12 msgid "Name" msgstr "名称" @@ -353,6 +360,7 @@ msgstr "创建者" #: perms/templates/perms/asset_permission_detail.html:94 #: terminal/templates/terminal/terminal_detail.html:59 users/models/group.py:17 #: users/templates/users/user_group_detail.html:63 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:60 msgid "Date created" msgstr "创建日期" @@ -376,6 +384,9 @@ msgstr "创建日期" #: users/templates/users/user_group_detail.html:67 #: users/templates/users/user_group_list.html:14 #: users/templates/users/user_profile.html:130 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:64 +#: xpack/plugins/orgs/templates/orgs/org_list.html:22 +#: xpack/templates/orgs/org_list.html:14 msgid "Comment" msgstr "备注" @@ -455,7 +466,11 @@ msgstr "默认资产组" #: terminal/templates/terminal/session_list.html:71 users/forms.py:312 #: users/models/user.py:33 users/models/user.py:348 #: users/templates/users/user_group_detail.html:78 -#: users/templates/users/user_group_list.html:13 users/views/user.py:379 +#: users/templates/users/user_group_list.html:13 users/views/user.py:378 +#: xpack/plugins/orgs/forms.py:26 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:113 +#: xpack/plugins/orgs/templates/orgs/org_list.html:14 +#: xpack/templates/orgs/org_list.html:13 msgid "User" msgstr "用户" @@ -485,9 +500,9 @@ msgstr "手动登录" #: assets/templates/assets/system_user_asset.html:21 #: assets/views/admin_user.py:29 assets/views/admin_user.py:47 #: assets/views/admin_user.py:63 assets/views/admin_user.py:78 -#: assets/views/admin_user.py:102 assets/views/asset.py:52 -#: assets/views/asset.py:99 assets/views/asset.py:159 assets/views/asset.py:176 -#: assets/views/asset.py:200 assets/views/domain.py:29 +#: assets/views/admin_user.py:102 assets/views/asset.py:53 +#: assets/views/asset.py:92 assets/views/asset.py:136 assets/views/asset.py:153 +#: assets/views/asset.py:177 assets/views/domain.py:29 #: assets/views/domain.py:45 assets/views/domain.py:61 #: assets/views/domain.py:74 assets/views/domain.py:98 #: assets/views/domain.py:126 assets/views/domain.py:145 @@ -533,6 +548,7 @@ msgstr "登录模式" #: terminal/templates/terminal/command_list.html:74 #: terminal/templates/terminal/session_list.html:49 #: terminal/templates/terminal/session_list.html:73 +#: xpack/plugins/orgs/templates/orgs/org_list.html:19 msgid "System user" msgstr "系统用户" @@ -621,7 +637,7 @@ msgstr "资产csv文件" msgid "If set id, will use this id update asset existed" msgstr "如果设置了id,则会使用该行信息更新该id的资产" -#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:53 +#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:54 #: templates/_nav.html:23 msgid "Asset list" msgstr "资产列表" @@ -709,7 +725,7 @@ msgid "Submit" msgstr "提交" #: assets/templates/assets/_user_asset_detail_modal.html:11 -#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:201 +#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:178 msgid "Asset detail" msgstr "资产详情" @@ -791,6 +807,9 @@ msgstr "测试" #: users/templates/users/user_list.html:77 #: users/templates/users/user_profile.html:151 #: users/templates/users/user_profile.html:180 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:25 +#: xpack/plugins/orgs/templates/orgs/org_list.html:85 +#: xpack/templates/orgs/org_list.html:43 msgid "Update" msgstr "更新" @@ -814,6 +833,9 @@ msgstr "更新" #: users/templates/users/user_group_list.html:45 #: users/templates/users/user_list.html:81 #: users/templates/users/user_list.html:85 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:29 +#: xpack/plugins/orgs/templates/orgs/org_list.html:87 +#: xpack/templates/orgs/org_list.html:45 msgid "Delete" msgstr "删除" @@ -840,6 +862,8 @@ msgstr "选择节点" #: users/templates/users/user_group_list.html:86 #: users/templates/users/user_list.html:200 #: users/templates/users/user_profile.html:222 +#: xpack/plugins/orgs/templates/orgs/org_create_update.html:33 +#: xpack/templates/orgs/org_list.html:86 msgid "Confirm" msgstr "确认" @@ -873,6 +897,8 @@ msgstr "比例" #: terminal/templates/terminal/terminal_list.html:36 #: users/templates/users/user_group_list.html:15 #: users/templates/users/user_list.html:29 +#: xpack/plugins/orgs/templates/orgs/org_list.html:23 +#: xpack/templates/orgs/org_list.html:15 msgid "Action" msgstr "动作" @@ -928,7 +954,7 @@ msgstr "刷新" msgid "Update successfully!" msgstr "更新成功" -#: assets/templates/assets/asset_list.html:68 assets/views/asset.py:100 +#: assets/templates/assets/asset_list.html:68 assets/views/asset.py:93 msgid "Create asset" msgstr "创建资产" @@ -1033,6 +1059,7 @@ msgstr "重命名失败,不可以更改根节点名称" #: users/templates/users/user_detail.html:461 #: users/templates/users/user_group_list.html:81 #: users/templates/users/user_list.html:195 +#: xpack/templates/orgs/org_list.html:81 msgid "Are you sure?" msgstr "你确认吗?" @@ -1179,19 +1206,23 @@ msgstr "更新管理用户" msgid "Admin user detail" msgstr "管理用户详情" -#: assets/views/asset.py:66 templates/_nav_user.html:4 +#: assets/views/asset.py:67 templates/_nav_user.html:4 msgid "My assets" msgstr "我的资产" -#: assets/views/asset.py:160 +#: assets/views/asset.py:107 +msgid "Bulk update asset success" +msgstr "批量更新资产成功" + +#: assets/views/asset.py:137 msgid "Bulk update asset" msgstr "批量更新资产" -#: assets/views/asset.py:177 +#: assets/views/asset.py:154 msgid "Update asset" msgstr "更新资产" -#: assets/views/asset.py:317 +#: assets/views/asset.py:294 msgid "already exists" msgstr "已经存在" @@ -1658,6 +1689,7 @@ msgid "Become" msgstr "Become" #: ops/models/adhoc.py:161 users/templates/users/user_group_detail.html:59 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:56 msgid "Create by" msgstr "创建者" @@ -1876,18 +1908,19 @@ msgstr "任务列表" msgid "Task run history" msgstr "执行历史" -#: perms/forms.py:20 users/forms.py:265 users/forms.py:270 users/forms.py:282 -#: users/forms.py:316 +#: perms/forms.py:20 users/forms.py:265 users/forms.py:270 users/forms.py:316 +#: xpack/plugins/orgs/forms.py:30 msgid "Select users" msgstr "选择用户" #: perms/forms.py:44 perms/models.py:30 perms/models.py:79 #: perms/templates/perms/asset_permission_list.html:55 #: perms/templates/perms/asset_permission_list.html:145 templates/_nav.html:14 -#: users/models/group.py:26 users/models/user.py:57 +#: users/forms.py:282 users/models/group.py:26 users/models/user.py:57 #: users/templates/users/_select_user_modal.html:16 #: users/templates/users/user_detail.html:200 #: users/templates/users/user_list.html:26 +#: xpack/plugins/orgs/templates/orgs/org_list.html:15 msgid "User group" msgstr "用户组" @@ -1906,7 +1939,7 @@ msgstr "" msgid "Date expired" msgstr "失效日期" -#: perms/models.py:92 templates/_nav.html:34 +#: perms/models.py:91 templates/_nav.html:34 msgid "Asset permission" msgstr "资产授权" @@ -1931,6 +1964,8 @@ msgstr "添加资产" #: perms/templates/perms/asset_permission_user.html:97 #: perms/templates/perms/asset_permission_user.html:125 #: users/templates/users/user_group_detail.html:95 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:93 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:130 msgid "Add" msgstr "添加" @@ -1998,6 +2033,7 @@ msgstr "选择用户组" #: perms/views.py:23 perms/views.py:53 perms/views.py:68 perms/views.py:83 #: perms/views.py:118 perms/views.py:150 templates/_nav.html:31 +#: xpack/plugins/orgs/templates/orgs/org_list.html:21 msgid "Perms" msgstr "权限管理" @@ -2036,7 +2072,7 @@ msgstr "文档" #: users/templates/users/user_profile.html:17 #: users/templates/users/user_profile_update.html:37 #: users/templates/users/user_profile_update.html:57 -#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:361 +#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:360 msgid "Profile" msgstr "个人信息" @@ -2089,13 +2125,13 @@ msgstr "" #: templates/_nav.html:10 users/views/group.py:27 users/views/group.py:43 #: users/views/group.py:61 users/views/group.py:78 users/views/group.py:94 -#: users/views/login.py:333 users/views/login.py:397 users/views/user.py:68 -#: users/views/user.py:83 users/views/user.py:111 users/views/user.py:193 -#: users/views/user.py:348 users/views/user.py:398 users/views/user.py:433 +#: users/views/login.py:333 users/views/login.py:397 users/views/user.py:67 +#: users/views/user.py:82 users/views/user.py:110 users/views/user.py:192 +#: users/views/user.py:347 users/views/user.py:397 users/views/user.py:432 msgid "Users" msgstr "用户管理" -#: templates/_nav.html:13 users/views/user.py:69 +#: templates/_nav.html:13 users/views/user.py:68 msgid "User list" msgstr "用户列表" @@ -2449,7 +2485,7 @@ msgstr "添加到用户组" msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" -#: users/forms.py:114 users/forms.py:247 users/serializers.py:48 +#: users/forms.py:114 users/forms.py:247 users/serializers.py:49 msgid "Not a valid ssh public key" msgstr "ssh密钥不合法" @@ -2799,7 +2835,7 @@ msgid "Very strong" msgstr "很强" #: users/templates/users/user_create.html:4 -#: users/templates/users/user_list.html:16 users/views/user.py:83 +#: users/templates/users/user_list.html:16 users/views/user.py:82 msgid "Create user" msgstr "创建用户" @@ -2808,7 +2844,7 @@ msgid "Reset link will be generated and sent to the user. " msgstr "生成重置密码连接,通过邮件发送给用户" #: users/templates/users/user_detail.html:19 -#: users/templates/users/user_granted_asset.html:18 users/views/user.py:194 +#: users/templates/users/user_granted_asset.html:18 users/views/user.py:193 msgid "User detail" msgstr "用户详情" @@ -2897,6 +2933,7 @@ msgid "After unlocking the user, the user can log in normally." msgstr "解除用户登录限制后,此用户即可正常登录" #: users/templates/users/user_group_create_update.html:31 +#: xpack/plugins/orgs/templates/orgs/org_create_update.html:32 msgid "Cancel" msgstr "取消" @@ -2907,27 +2944,33 @@ msgid "User group detail" msgstr "用户组详情" #: users/templates/users/user_group_detail.html:86 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:121 msgid "Add user" msgstr "添加用户" #: users/templates/users/user_group_list.html:5 users/views/group.py:44 +#: xpack/templates/orgs/org_list.html:5 msgid "Create user group" msgstr "创建用户组" #: users/templates/users/user_group_list.html:82 +#: xpack/templates/orgs/org_list.html:82 msgid "This will delete the selected groups !!!" msgstr "删除选择组" #: users/templates/users/user_group_list.html:90 +#: xpack/templates/orgs/org_list.html:90 msgid "UserGroups Deleted." msgstr "用户组删除" #: users/templates/users/user_group_list.html:91 #: users/templates/users/user_group_list.html:96 +#: xpack/templates/orgs/org_list.html:91 xpack/templates/orgs/org_list.html:96 msgid "UserGroups Delete" msgstr "用户组删除" #: users/templates/users/user_group_list.html:95 +#: xpack/templates/orgs/org_list.html:95 msgid "UserGroup Deleting failed." msgstr "用户组删除失败" @@ -2952,8 +2995,8 @@ msgstr "用户删除失败" msgid "Administrator Settings force MFA login" msgstr "管理员设置强制使用MFA登录" -#: users/templates/users/user_profile.html:116 users/views/user.py:224 -#: users/views/user.py:278 +#: users/templates/users/user_profile.html:116 users/views/user.py:223 +#: users/views/user.py:277 msgid "User groups" msgstr "用户组" @@ -2999,7 +3042,7 @@ msgid "" "corresponding private key." msgstr "新的公钥已设置成功,请下载对应的私钥" -#: users/templates/users/user_update.html:4 users/views/user.py:112 +#: users/templates/users/user_update.html:4 users/views/user.py:111 msgid "Update user" msgstr "更新用户" @@ -3157,7 +3200,7 @@ msgstr "用户组授权资产" msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: users/views/login.py:181 users/views/user.py:518 users/views/user.py:543 +#: users/views/login.py:181 users/views/user.py:517 users/views/user.py:542 msgid "MFA code invalid" msgstr "MFA码认证失败" @@ -3198,7 +3241,7 @@ msgstr "Token错误或失效" msgid "Password not same" msgstr "密码不一致" -#: users/views/login.py:295 users/views/user.py:127 users/views/user.py:416 +#: users/views/login.py:295 users/views/user.py:126 users/views/user.py:415 msgid "* Your password does not meet the requirements" msgstr "* 您的密码不符合要求" @@ -3210,82 +3253,101 @@ msgstr "首次登陆" msgid "Login log list" msgstr "登录日志" -#: users/views/user.py:144 +#: users/views/user.py:143 msgid "Bulk update user success" msgstr "批量更新用户成功" -#: users/views/user.py:253 +#: users/views/user.py:173 +msgid "Bulk update user" +msgstr "批量更新用户" + +#: users/views/user.py:252 msgid "Invalid file." msgstr "文件不合法" -#: users/views/user.py:349 +#: users/views/user.py:348 msgid "User granted assets" msgstr "用户授权资产" -#: users/views/user.py:380 +#: users/views/user.py:379 msgid "Profile setting" msgstr "个人信息设置" -#: users/views/user.py:399 +#: users/views/user.py:398 msgid "Password update" msgstr "密码更新" -#: users/views/user.py:434 +#: users/views/user.py:433 msgid "Public key update" msgstr "密钥更新" -#: users/views/user.py:475 +#: users/views/user.py:474 msgid "Password invalid" msgstr "用户名或密码无效" -#: users/views/user.py:569 +#: users/views/user.py:568 msgid "MFA enable success" msgstr "MFA 绑定成功" -#: users/views/user.py:570 +#: users/views/user.py:569 msgid "MFA enable success, return login page" msgstr "MFA 绑定成功,返回到登录页面" -#: users/views/user.py:572 +#: users/views/user.py:571 msgid "MFA disable success" msgstr "MFA 解绑成功" -#: users/views/user.py:573 +#: users/views/user.py:572 msgid "MFA disable success, return login page" msgstr "MFA 解绑成功,返回登录页面" -#~ msgid "Admin" -#~ msgstr "管理员" +#: xpack/plugins/orgs/forms.py:14 +#: xpack/plugins/orgs/templates/orgs/org_detail.html:76 +#: xpack/plugins/orgs/templates/orgs/org_list.html:13 +msgid "Admin" +msgstr "管理员" -#~ msgid "Select admins" -#~ msgstr "选择管理员" +#: xpack/plugins/orgs/forms.py:18 +msgid "Select admins" +msgstr "选择管理员" -#~ msgid "Organization" -#~ msgstr "组织管理" +#: xpack/plugins/orgs/meta.py:8 +msgid "Organization" +msgstr "组织管理" -#~ msgid "Org detail" -#~ msgstr "组织详情" +#: xpack/plugins/orgs/templates/orgs/org_detail.html:22 +#: xpack/plugins/orgs/views.py:73 +msgid "Org detail" +msgstr "组织详情" -#~ msgid "Add admin" -#~ msgstr "添加管理员" +#: xpack/plugins/orgs/templates/orgs/org_detail.html:84 +msgid "Add admin" +msgstr "添加管理员" -#~ msgid "Create organization " -#~ msgstr "创建组织" +#: xpack/plugins/orgs/templates/orgs/org_list.html:5 +msgid "Create organization " +msgstr "创建组织" -#~ msgid "Org" -#~ msgstr "组织" +#: xpack/plugins/orgs/views.py:24 +msgid "Org" +msgstr "组织" -#~ msgid "Org list" -#~ msgstr "组织列表" +#: xpack/plugins/orgs/views.py:25 +msgid "Org list" +msgstr "组织列表" -#~ msgid "Orgs" -#~ msgstr "组织" +#: xpack/plugins/orgs/views.py:40 xpack/plugins/orgs/views.py:56 +#: xpack/plugins/orgs/views.py:72 +msgid "Orgs" +msgstr "组织" -#~ msgid "Create org" -#~ msgstr "创建组织" +#: xpack/plugins/orgs/views.py:41 +msgid "Create org" +msgstr "创建组织" -#~ msgid "Update org" -#~ msgstr "更新组织" +#: xpack/plugins/orgs/views.py:57 +msgid "Update org" +msgstr "更新组织" #~ msgid "* required Must set exact system platform, Windows, Linux ..." #~ msgstr "* required 必须准确设置操作系统平台,如Windows, Linux ..." diff --git a/apps/orgs/mixins.py b/apps/orgs/mixins.py index e613c81ef..0355b02f8 100644 --- a/apps/orgs/mixins.py +++ b/apps/orgs/mixins.py @@ -1,11 +1,10 @@ # -*- coding: utf-8 -*- # -from threading import local +from werkzeug.local import Local from django.db import models from django.db.models import Q from django.shortcuts import redirect -import warnings from django.forms import ModelForm from django.http.response import HttpResponseForbidden @@ -14,7 +13,7 @@ from .utils import current_org, set_current_org, set_to_root_org from .models import Organization logger = get_logger(__file__) -tl = local() +tl = Local() __all__ = [ 'OrgManager', 'OrgViewGenericMixin', 'OrgModelMixin', 'OrgModelForm', @@ -93,8 +92,8 @@ class RootOrgViewMixin: class OrgModelForm(ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if 'initial' not in kwargs: - return + # if 'initial' not in kwargs: + # return for name, field in self.fields.items(): if not hasattr(field, 'queryset'): continue diff --git a/apps/orgs/utils.py b/apps/orgs/utils.py index 80a5a9a46..4dba4d347 100644 --- a/apps/orgs/utils.py +++ b/apps/orgs/utils.py @@ -2,16 +2,13 @@ # from functools import partial +from werkzeug.local import Local from common.utils import LocalProxy from .models import Organization -try: - from threading import local -except ImportError: - from django.utils._threading_local import local -_thread_locals = local() +_thread_locals = Local() def get_org_from_request(request): diff --git a/apps/users/forms.py b/apps/users/forms.py index d1bcf44b5..5ccc0b2ac 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -258,12 +258,12 @@ class UserPublicKeyForm(forms.Form): UserPublicKeyForm.verbose_name = _("Public key") -class UserBulkUpdateForm(forms.ModelForm): +class UserBulkUpdateForm(OrgModelForm): users = forms.ModelMultipleChoiceField( required=True, help_text='* required', label=_('Select users'), - queryset = User.objects.all(), + queryset=User.objects.all(), widget=forms.SelectMultiple( attrs={ 'class': 'select2', @@ -274,12 +274,12 @@ class UserBulkUpdateForm(forms.ModelForm): class Meta: model = User - fields = ['users', 'role', 'groups', 'date_expired'] + fields = ['users', 'groups', 'date_expired'] widgets = { "groups": forms.SelectMultiple( attrs={ 'class': 'select2', - 'data-placeholder': _('Select users') + 'data-placeholder': _('User group') } ) } diff --git a/apps/users/views/user.py b/apps/users/views/user.py index 133298c43..06fc0dd14 100644 --- a/apps/users/views/user.py +++ b/apps/users/views/user.py @@ -24,9 +24,9 @@ from django.views import View from django.views.generic.base import TemplateView from django.db import transaction from django.views.generic.edit import ( - CreateView, UpdateView, FormMixin, FormView + CreateView, UpdateView, FormView ) -from django.views.generic.detail import DetailView, SingleObjectMixin +from django.views.generic.detail import DetailView from django.views.decorators.csrf import csrf_exempt from django.contrib.auth import logout as auth_logout @@ -41,7 +41,6 @@ from ..utils import generate_otp_uri, check_otp_code, \ get_user_or_tmp_user, get_password_check_rules, check_password_rules, \ is_need_unblock from ..signals import post_user_create -from ..tasks import write_login_log_async __all__ = [ 'UserListView', 'UserCreateView', 'UserDetailView', @@ -171,7 +170,7 @@ class UserBulkUpdateView(AdminUserRequiredMixin, TemplateView): def get_context_data(self, **kwargs): context = { 'app': 'Assets', - 'action': 'Bulk update asset', + 'action': _('Bulk update user'), 'form': self.form, 'users_selected': self.id_list, } diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 3c23aba2b..71f0a844f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -70,3 +70,4 @@ uritemplate==3.0.0 urllib3==1.22 vine==1.1.4 drf-yasg==1.9.1 +Werkzeug==0.14.1