django-unfold 0.57.0__py3-none-any.whl → 0.59.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_unfold-0.57.0.dist-info → django_unfold-0.59.0.dist-info}/METADATA +1 -1
- {django_unfold-0.57.0.dist-info → django_unfold-0.59.0.dist-info}/RECORD +57 -55
- unfold/checks.py +24 -2
- unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +2 -2
- unfold/contrib/import_export/templates/admin/import_export/base.html +1 -5
- unfold/contrib/import_export/templates/admin/import_export/import_form.html +1 -1
- unfold/contrib/simple_history/templates/simple_history/object_history_form.html +1 -1
- unfold/decorators.py +28 -15
- unfold/fields.py +1 -1
- unfold/forms.py +4 -2
- unfold/layout.py +16 -0
- unfold/mixins/action_model_admin.py +22 -14
- unfold/paginator.py +12 -1
- unfold/settings.py +8 -1
- unfold/sites.py +87 -40
- unfold/static/admin/js/admin/RelatedObjectLookups.js +9 -3
- unfold/static/unfold/css/styles.css +2 -2
- unfold/styles.css +59 -104
- unfold/templates/admin/auth/user/change_password.html +1 -1
- unfold/templates/admin/base.html +1 -1
- unfold/templates/admin/change_form.html +2 -1
- unfold/templates/admin/edit_inline/stacked.html +1 -1
- unfold/templates/admin/includes/fieldset.html +9 -3
- unfold/templates/admin/login.html +1 -1
- unfold/templates/admin/pagination.html +1 -1
- unfold/templates/admin/submit_line.html +7 -7
- unfold/templates/registration/password_change_done.html +1 -1
- unfold/templates/registration/password_change_form.html +1 -1
- unfold/templates/unfold/components/button.html +1 -1
- unfold/templates/unfold/components/card.html +23 -23
- unfold/templates/unfold/components/progress.html +9 -7
- unfold/templates/unfold/components/table.html +5 -5
- unfold/templates/unfold/helpers/account_links.html +14 -6
- unfold/templates/unfold/helpers/change_list_actions.html +2 -2
- unfold/templates/unfold/helpers/change_list_filter_actions.html +2 -2
- unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +1 -1
- unfold/templates/unfold/helpers/empty_results.html +2 -2
- unfold/templates/unfold/helpers/field.html +2 -2
- unfold/templates/unfold/helpers/header.html +1 -1
- unfold/templates/unfold/helpers/language_form.html +10 -0
- unfold/templates/unfold/helpers/language_switch.html +17 -19
- unfold/templates/unfold/helpers/navigation.html +1 -1
- unfold/templates/unfold/helpers/pagination_infinite.html +3 -3
- unfold/templates/unfold/helpers/theme_switch.html +29 -27
- unfold/templates/unfold/helpers/userlinks.html +2 -6
- unfold/templates/unfold/helpers/welcomemsg.html +9 -7
- unfold/templates/unfold/widgets/select.html +1 -1
- unfold/templates/unfold_crispy/field.html +1 -1
- unfold/templates/unfold_crispy/layout/checkbox.html +2 -2
- unfold/templates/unfold_crispy/layout/fieldset.html +4 -2
- unfold/templates/unfold_crispy/layout/fieldset_subheader.html +3 -0
- unfold/templates/unfold_crispy/layout/table_inline_formset.html +18 -16
- unfold/templatetags/unfold.py +20 -1
- unfold/utils.py +2 -2
- unfold/widgets.py +10 -4
- {django_unfold-0.57.0.dist-info → django_unfold-0.59.0.dist-info}/LICENSE.md +0 -0
- {django_unfold-0.57.0.dist-info → django_unfold-0.59.0.dist-info}/WHEEL +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
unfold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
unfold/admin.py,sha256=2YwKqP5slOtqpEInq_u-0-XlddY7Qnj21VeH-lsLkxg,6552
|
3
3
|
unfold/apps.py,sha256=SlBXPYrUd2uXn67qFbRvbXSUk3XFWrF4-5WELgDCvho,381
|
4
|
-
unfold/checks.py,sha256=
|
4
|
+
unfold/checks.py,sha256=e5HEhbXRcu3FwZDT_d-IbimeVpjJ6jgCUPXWvsUjEw0,2601
|
5
5
|
unfold/components.py,sha256=vqkQzseYUvLXDohmTVAlbKopALjyX4WA9yglvdfhqu4,1283
|
6
6
|
unfold/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
unfold/contrib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -28,7 +28,7 @@ unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html,sha2
|
|
28
28
|
unfold/contrib/filters/templates/unfold/filters/filters_field.html,sha256=UTlSZlpg-gAc_a-EJLLF0NI_ofuSHQ2kMMoAs99nL2E,164
|
29
29
|
unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html,sha256=TnklQxXhe17UaImoiHahhtN6d1xVdXt2dhIMQESJY68,661
|
30
30
|
unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html,sha256=uELVrDzFgmzGwkm37SpZeXXbfpijDnSBIJVtf6evWjM,598
|
31
|
-
unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html,sha256=
|
31
|
+
unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html,sha256=_yOzo0T0OcHFKAZFj6L3-4_Y9MlKg53yKMq7LizWFS0,1762
|
32
32
|
unfold/contrib/forms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
unfold/contrib/forms/apps.py,sha256=Di0TMzVuRpVxLG-8Bjdq5ALCSf5r7u2xVhD0jU6H5Sc,132
|
34
34
|
unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE,sha256=-g0UVDdcvHcBvBPZFsOuceYTuK5xgyFkHmeOCUCTk8Q,1053
|
@@ -52,7 +52,7 @@ unfold/contrib/guardian/templates/unfold/guardian/user_form.html,sha256=JqYF7HiI
|
|
52
52
|
unfold/contrib/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
53
|
unfold/contrib/import_export/apps.py,sha256=SdJu6Qh90VqGWY19FSDhhpUqhTbaIYsJKny3zX5baHI,149
|
54
54
|
unfold/contrib/import_export/forms.py,sha256=kh8psUoTObrRb2wtkYhvRu1D5QM02xWk4UNLQT5lQZA,2038
|
55
|
-
unfold/contrib/import_export/templates/admin/import_export/base.html,sha256=
|
55
|
+
unfold/contrib/import_export/templates/admin/import_export/base.html,sha256=y-J1gzrbkF-72XwKnRIC6zAD1Ud3Lwvs2M0UhS-NirI,262
|
56
56
|
unfold/contrib/import_export/templates/admin/import_export/change_form.html,sha256=TYiMBf8bSJoMiSrHGAa-OwyheVyNG3WyWFNeH2tmZjc,460
|
57
57
|
unfold/contrib/import_export/templates/admin/import_export/change_list_export.html,sha256=vZb2XVoJrDSjM1msiZqkQPMLQGjuqRHuLNdt11hmbQs,164
|
58
58
|
unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html,sha256=pTDeqPKOlCPKH2dxMIfPnWuc2wVDzB7AzL73WbxSnRY,257
|
@@ -62,7 +62,7 @@ unfold/contrib/import_export/templates/admin/import_export/export.html,sha256=uz
|
|
62
62
|
unfold/contrib/import_export/templates/admin/import_export/import.html,sha256=uI9me41UQ_iMf1PCPlyGm7MjSqI2lKPhGhUD5IPrDRs,2126
|
63
63
|
unfold/contrib/import_export/templates/admin/import_export/import_confirm.html,sha256=VeGgT1hDunN5c9ijeOvkIezdAmkrsABt5bAnyg5Mu8c,879
|
64
64
|
unfold/contrib/import_export/templates/admin/import_export/import_errors.html,sha256=tgGPoNea7JtuqwVuh-a2TSip7lM8inJvgcVfrsYB_FA,1805
|
65
|
-
unfold/contrib/import_export/templates/admin/import_export/import_form.html,sha256=
|
65
|
+
unfold/contrib/import_export/templates/admin/import_export/import_form.html,sha256=GkivtNDO5IKuVxwPK1pD0czUsuuXWHGjk2dETO-1pZg,1002
|
66
66
|
unfold/contrib/import_export/templates/admin/import_export/import_preview.html,sha256=365nlrJ36dg4pKGKwIOE9MADWYaHhChp_B2jZG2sBOU,2273
|
67
67
|
unfold/contrib/import_export/templates/admin/import_export/import_validation.html,sha256=K7j5OlWMQUTcSVulJtIraKfWIupSvmN4R5bZ2hH4tRA,5117
|
68
68
|
unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html,sha256=Bc6uD8aHA5YYbZgLAPpGUckFjnxn9uq19YuKKFxTj4Y,887
|
@@ -74,29 +74,29 @@ unfold/contrib/inlines/forms.py,sha256=s49xrIkQTbvSMsrP4DydXWkpP1v8NCUmQw_Bcoqf0
|
|
74
74
|
unfold/contrib/simple_history/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
75
|
unfold/contrib/simple_history/apps.py,sha256=eF_KVYb60CAnGgWk2Z1YKYGfgA3TJBMr229qI7e2pgU,153
|
76
76
|
unfold/contrib/simple_history/templates/simple_history/object_history.html,sha256=unZQE70be7cK6v0YPlITFeaosmiLt3kiei-pmmCjBg0,1711
|
77
|
-
unfold/contrib/simple_history/templates/simple_history/object_history_form.html,sha256=
|
77
|
+
unfold/contrib/simple_history/templates/simple_history/object_history_form.html,sha256=1wsz8KTmjsgAthFS2myfcS3QvyeL0-qT8s2w7JINVhQ,2256
|
78
78
|
unfold/contrib/simple_history/templates/simple_history/object_history_list.html,sha256=PWtjuAcxciAI001qIrXLvbUxzCFl_SDAaHA5FhR16Z8,6858
|
79
79
|
unfold/contrib/simple_history/templates/simple_history/submit_line.html,sha256=tJgOgq7lMetWF4DJoBqUYdRSY6EeRivXhOBYlyPXzTk,1750
|
80
80
|
unfold/dataclasses.py,sha256=a-9INnkCAIcnMgoffTcB1rxWCJH33AjhMCWIGWnjWbI,719
|
81
|
-
unfold/decorators.py,sha256=
|
81
|
+
unfold/decorators.py,sha256=jPiYFy1p0WGFn68VZhAZkYCPDF7argb9SDFaH6aemHk,4922
|
82
82
|
unfold/enums.py,sha256=9sTfyEycMWeoGPBa-ft6ZhQGnW1vkFg108RMBVf9nko,187
|
83
83
|
unfold/exceptions.py,sha256=gcCj1ox61E137bk_0Cqy4YC3SttdPgB-fiJUqpmyHSE,43
|
84
|
-
unfold/fields.py,sha256=
|
85
|
-
unfold/forms.py,sha256=
|
86
|
-
unfold/layout.py,sha256=
|
84
|
+
unfold/fields.py,sha256=g8gWFWsCQAooTBT8ngASaryW3fgaBZx6aPuTdLc1NqY,7472
|
85
|
+
unfold/forms.py,sha256=f8OanxLAmV6dftNj-apgjtCrIVj_iEU830AbMeZh71I,4709
|
86
|
+
unfold/layout.py,sha256=Q-dFTA6UlvvPCA4PsGyTkHQmBLO7PL56xBfZi-bdt0c,1459
|
87
87
|
unfold/mixins/__init__.py,sha256=YlhoDs9Y_DXQ8Ejr3enxuHMS1-Ij9fwukxNwpeOS4Co,190
|
88
|
-
unfold/mixins/action_model_admin.py,sha256=
|
88
|
+
unfold/mixins/action_model_admin.py,sha256=9Zt4FLrQWEQSO2vrpwjzpFo_I3_yE000uEwHndsW5kg,12365
|
89
89
|
unfold/mixins/base_model_admin.py,sha256=PR4eqU48yB4CNy9Bjd7fjxbOFiFpZM4etYmBOSaRX_M,4140
|
90
90
|
unfold/overrides.py,sha256=ERVY9boZiXgjDYcTEZcIp7KWoeBZ45VM_zN31yAOjyQ,2922
|
91
|
-
unfold/paginator.py,sha256=
|
91
|
+
unfold/paginator.py,sha256=bZiEY-1kqZy_6CYGs9fHo6WntMgpnFCH-LJPoXkEESk,533
|
92
92
|
unfold/sections.py,sha256=Lcg3xCZ76fqjm4vD4x7YdE5VsbTKluL-sX5QTEBlHxA,2379
|
93
|
-
unfold/settings.py,sha256=
|
94
|
-
unfold/sites.py,sha256=
|
95
|
-
unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=
|
93
|
+
unfold/settings.py,sha256=DE3hComMaWtty8o-LqdgGGcoku3mevRWJah4NH1k5B4,2879
|
94
|
+
unfold/sites.py,sha256=Zxz2ey_rfFnCrYwqiPaLAvUDSehftPxFLOm-AX6b50M,18166
|
95
|
+
unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=0bZ2MGuO6F0IF_lQ7-hTP6ofqZtrH44Pt4ElaPqyNz8,9199
|
96
96
|
unfold/static/admin/js/inlines.js,sha256=zcYwLGI_6RHg-gucDbbhp43RRoZd3so8bPk841KFaIE,15573
|
97
97
|
unfold/static/unfold/css/simplebar/LICENSE,sha256=okNJf6UFl2NrEiC4iqORNBa16IKgUgV88acdcl9FbtY,1081
|
98
98
|
unfold/static/unfold/css/simplebar/simplebar.css,sha256=5LLaEM11pKi6JFCOLt4XKuZxTpT9rpdq_tNlaQytFlU,4647
|
99
|
-
unfold/static/unfold/css/styles.css,sha256=
|
99
|
+
unfold/static/unfold/css/styles.css,sha256=RYbHZGbPj3wTqi87UahjSTRRTeoC1Jrfpjah-o612jU,159143
|
100
100
|
unfold/static/unfold/fonts/inter/Inter-Bold.woff2,sha256=-oiBJ7baAVtlVp8DUfO1w5GtkokElR8cIOn4RiqNleo,114840
|
101
101
|
unfold/static/unfold/fonts/inter/Inter-Medium.woff2,sha256=D_PpRhThST61VjFP0keubEqFp3g7TMhr5TmUDPg_Kkg,114348
|
102
102
|
unfold/static/unfold/fonts/inter/Inter-Regular.woff2,sha256=4G9rG8VTqupORmgCPtCrChRxKcMQf1Ebx9A9NhsK4IU,111268
|
@@ -120,15 +120,15 @@ unfold/static/unfold/js/htmx/htmx.js,sha256=acrv0NqSJpBm5yXX_hdeJrnVDJYuMFZFnAxH
|
|
120
120
|
unfold/static/unfold/js/select2.init.js,sha256=l0O8ggw_CkAw-QtH3qEzC8xWk0mR9QHjy4VzAjMwiQQ,1109
|
121
121
|
unfold/static/unfold/js/simplebar/LICENSE,sha256=okNJf6UFl2NrEiC4iqORNBa16IKgUgV88acdcl9FbtY,1081
|
122
122
|
unfold/static/unfold/js/simplebar/simplebar.js,sha256=t-uG1FAD6ZoiMeN--wac0XRS7SxoDVG6zvRnGuEp7X8,27176
|
123
|
-
unfold/styles.css,sha256=
|
123
|
+
unfold/styles.css,sha256=YSDKjgENtZyAg9ceUztuJj9JXgAlUr3wJpwnSOZ6TMc,21246
|
124
124
|
unfold/templates/admin/actions.html,sha256=iuuubcAILkOoYBgV6cpXqFIyZUh4zMqyFp0JaDFlPKU,3096
|
125
125
|
unfold/templates/admin/app_index.html,sha256=LRR07CLcZVsYpisCOncWdMSACARNstcDt536Oydnt60,1239
|
126
126
|
unfold/templates/admin/app_list.html,sha256=2JbGENeKAVqYGYwm2Yv7I0lzQrLz0xRND18kPiMIi_Q,2861
|
127
127
|
unfold/templates/admin/auth/user/add_form.html,sha256=tZgg6UoKxJ7zL6T99PLHlLBwd4LlDI2mGn6d5hmtsPs,486
|
128
|
-
unfold/templates/admin/auth/user/change_password.html,sha256=
|
129
|
-
unfold/templates/admin/base.html,sha256=
|
128
|
+
unfold/templates/admin/auth/user/change_password.html,sha256=028v1dfQTlSmdr-WCuV4lBOmFa7Oo38CsYhsXEe8ANI,2831
|
129
|
+
unfold/templates/admin/base.html,sha256=z9sU8rezHLqOZk5x13_5nvnqpRYf6XxQaMfa7N_GU68,2460
|
130
130
|
unfold/templates/admin/base_site.html,sha256=UOsecaCycpyn_ygJNIKO7MQtDFJuHv--r83-mzaVY30,300
|
131
|
-
unfold/templates/admin/change_form.html,sha256=
|
131
|
+
unfold/templates/admin/change_form.html,sha256=stW5bIL_HuxtD9Bb0RVLHZiP8ln8lGBQ3D3V6MeJbAY,5616
|
132
132
|
unfold/templates/admin/change_form_object_tools.html,sha256=eyeH-i2HgEM0Yi-OJA2D1VnKJyC19A_my1IDGxxoP8Y,593
|
133
133
|
unfold/templates/admin/change_list.html,sha256=49PwsDjJuTDXfoCqpUqAFc84HFNOJk8dIHSdYCQIDuk,5269
|
134
134
|
unfold/templates/admin/change_list_object_tools.html,sha256=cmMiT2nT20Ph5yfpj9aHPr76Z-JP4aSXp0o-Rnad28s,147
|
@@ -136,24 +136,24 @@ unfold/templates/admin/change_list_results.html,sha256=u9eUoOTWJ9woVeLVYhftAriCX
|
|
136
136
|
unfold/templates/admin/date_hierarchy.html,sha256=A-sIqBKzZTMqSn3NSHORIL1yTEAqhj4Atff0OvWtqT0,1413
|
137
137
|
unfold/templates/admin/delete_confirmation.html,sha256=IPSGhOpxDl6hJB9LtpSg_XRkVmbDO1BpO9q_dthqkac,4635
|
138
138
|
unfold/templates/admin/delete_selected_confirmation.html,sha256=T3NNe7pP0WM2QM4F39AbkDGsfd_d_tKYRpwxvExahgU,4399
|
139
|
-
unfold/templates/admin/edit_inline/stacked.html,sha256=
|
139
|
+
unfold/templates/admin/edit_inline/stacked.html,sha256=RvdjkyXnTEzpWAI0GidvqxEFFK4x8NCEVHMlE2Y6OLQ,7664
|
140
140
|
unfold/templates/admin/edit_inline/tabular.html,sha256=F8o80H3GVHcGv_OARw0l5XrMPKXcgdNWX4cgorsNvkU,2948
|
141
141
|
unfold/templates/admin/filter.html,sha256=DEyrLgCWuncS1O1WR0vlt1evGQFvKoZV2pABkHzSoGU,2039
|
142
|
-
unfold/templates/admin/includes/fieldset.html,sha256=
|
142
|
+
unfold/templates/admin/includes/fieldset.html,sha256=F1XS_7bxeIbIxILjNdclXk_jFTmceUs_fZ4GjVwT1VM,1161
|
143
143
|
unfold/templates/admin/includes/object_delete_summary.html,sha256=FgwfapZCKWtnFtTHqh1MRuxxLot4bAw92WCcR_V8ImI,444
|
144
144
|
unfold/templates/admin/index.html,sha256=9ey6IIXxBVTEkVSDiQw01AwvMbUnG_h0B08N1Zg3wTg,578
|
145
|
-
unfold/templates/admin/login.html,sha256=
|
145
|
+
unfold/templates/admin/login.html,sha256=fAY1FF3P0Zc4WYXh3CpZOMuyrr7Bfz29VxwD-MJ_vHg,4605
|
146
146
|
unfold/templates/admin/nav_sidebar.html,sha256=xvCaXOamXawmf80NhE0OwjjjuNwoyoePS--lsdqDeIE,772
|
147
147
|
unfold/templates/admin/object_history.html,sha256=t-iJFQnpstowwsabGGA-FQjmcT1KIKhKLKbQ3iVELkk,4832
|
148
|
-
unfold/templates/admin/pagination.html,sha256
|
148
|
+
unfold/templates/admin/pagination.html,sha256=-9kjc_lKEeqvDVHMrnTfnlXDxMSkM8GNRGZGuI9D8os,912
|
149
149
|
unfold/templates/admin/search_form.html,sha256=ebd6ccOASaIUQsOZ0mVkcoB-EiKLqkN7y7cEm3fwsL8,1360
|
150
|
-
unfold/templates/admin/submit_line.html,sha256=
|
150
|
+
unfold/templates/admin/submit_line.html,sha256=GvknbdmXXEw93BIQ8azUHhnQ1AcojExgGiSr0XaNg2A,4658
|
151
151
|
unfold/templates/auth/widgets/read_only_password_hash.html,sha256=MlaNXJ2PLEbv8Nd01BBp-AQEfMB13LNxD_DzRemXhCg,775
|
152
152
|
unfold/templates/registration/logged_out.html,sha256=oIdaqGcvIdBih3yNnUkXSEpvofRsBJ77obldnhcnP2U,997
|
153
|
-
unfold/templates/registration/password_change_done.html,sha256=
|
154
|
-
unfold/templates/registration/password_change_form.html,sha256
|
155
|
-
unfold/templates/unfold/components/button.html,sha256=
|
156
|
-
unfold/templates/unfold/components/card.html,sha256=
|
153
|
+
unfold/templates/registration/password_change_done.html,sha256=ITV6Fug4S6YG3WG-O1cm-sDAXTHEXPcNZ_w2x1IQFu8,1006
|
154
|
+
unfold/templates/registration/password_change_form.html,sha256=-8AauxUHWHXVaokG269UsETY_FHKqU83Zx38ZzrAA1A,2159
|
155
|
+
unfold/templates/unfold/components/button.html,sha256=PXYHCy5x_REPQSOukXiyT901D5KmoWoSfMWlMrUPSEA,670
|
156
|
+
unfold/templates/unfold/components/card.html,sha256=N9ld_SWpXdmaqAea9bboy0bTg1YqIkAhsJmOj7nd0qs,1353
|
157
157
|
unfold/templates/unfold/components/chart/bar.html,sha256=nDdDCUXvFd793OpNgNPQo0vBmvYngMsQyPHVTf1vfOw,297
|
158
158
|
unfold/templates/unfold/components/chart/cohort.html,sha256=L00WR-igYv0C3t2yT_nZqeI-M5gVHpoaGv5RooRojqU,2402
|
159
159
|
unfold/templates/unfold/components/chart/line.html,sha256=DHaZUFTlCs5cX7ioYdTzoN4ITHWNcEoNSUp7v3hlo_E,298
|
@@ -161,13 +161,13 @@ unfold/templates/unfold/components/container.html,sha256=WBk1rGHnTsObi3pJCpL3dfF
|
|
161
161
|
unfold/templates/unfold/components/flex.html,sha256=_hBsQLJ6-7MfEfXNp5Wy-ykNtPMnnNg_io2IMGegn3s,134
|
162
162
|
unfold/templates/unfold/components/icon.html,sha256=Qlhcf41FOwNVJ-nvA0RJ_Dn6JW6PUFXO6tOR3Xtf6e8,99
|
163
163
|
unfold/templates/unfold/components/navigation.html,sha256=eVpuQ_yTxIv6JVL8sM21Wy-sBfGviIdEsQbEWPgw5WQ,903
|
164
|
-
unfold/templates/unfold/components/progress.html,sha256=
|
164
|
+
unfold/templates/unfold/components/progress.html,sha256=5D9z7PDo68jI_33e-MVPM0V3tywswn5fWc_x39XKQ_4,972
|
165
165
|
unfold/templates/unfold/components/separator.html,sha256=yvHywT_MFkx5dNC2K53OFHRGxLDsEjRpptujXyGeoTY,168
|
166
|
-
unfold/templates/unfold/components/table.html,sha256=
|
166
|
+
unfold/templates/unfold/components/table.html,sha256=VVMTrrDy_Oq09MG9aNAsnMZfXSp23K2sAMRnbjzOZmI,3355
|
167
167
|
unfold/templates/unfold/components/text.html,sha256=-GjxvdiaBQIaNfPSzT6SSIwnc3R27FkSDQMoF3FDPso,102
|
168
168
|
unfold/templates/unfold/components/title.html,sha256=aMYSO30ybFYqPnqwlJVh2uNmcgnVrRycZkHTjJTjpX8,171
|
169
169
|
unfold/templates/unfold/components/tracker.html,sha256=krlvsb06lpfdOIANsyrBOoLq1sgv6rXUGr-7MmP5Le0,292
|
170
|
-
unfold/templates/unfold/helpers/account_links.html,sha256=
|
170
|
+
unfold/templates/unfold/helpers/account_links.html,sha256=Tq30bAkOU8QRR6CaB1CvTfTgkoPP5dz2v0OHYq0pRSE,2348
|
171
171
|
unfold/templates/unfold/helpers/actions_row.html,sha256=RqhZsxgIFR-r1casv5CueL81uxNl8rA3XuCMDP--zLA,2586
|
172
172
|
unfold/templates/unfold/helpers/add_link.html,sha256=Z0TzUavXH8AQ7A-I0SQ79t-UI87dyP_PZEpsDrm13Q8,810
|
173
173
|
unfold/templates/unfold/helpers/app_list.html,sha256=AoTyb-0jQTnnAtPmXtiN52oEaeIbdtQZgzqqZZhquOc,5744
|
@@ -175,9 +175,9 @@ unfold/templates/unfold/helpers/app_list_default.html,sha256=LbyLT9xYgev0xXwprkX
|
|
175
175
|
unfold/templates/unfold/helpers/attrs.html,sha256=Mwpj72kuwYj8hOT3J2T8qx6f1r_4xwwaS1slHA-82jI,166
|
176
176
|
unfold/templates/unfold/helpers/boolean.html,sha256=kcSZr3siQeBWIy_jsx1tFf4m6IB3ooRnu8UUNQrh6so,569
|
177
177
|
unfold/templates/unfold/helpers/breadcrumb_item.html,sha256=9T6ojN7LOXIlgwSwlIwHgy5U22eQYtarCqcmzsQIoPU,201
|
178
|
-
unfold/templates/unfold/helpers/change_list_actions.html,sha256=
|
178
|
+
unfold/templates/unfold/helpers/change_list_actions.html,sha256=xuFMZel6kH014H9sl0hKvQo7LP0UxwlhFQHIUeyQxVM,643
|
179
179
|
unfold/templates/unfold/helpers/change_list_filter.html,sha256=WwU-AG4U5qZQ_sFs1z_jaaYBWqIv3ASmtKIQIhAp2gs,1908
|
180
|
-
unfold/templates/unfold/helpers/change_list_filter_actions.html,sha256=
|
180
|
+
unfold/templates/unfold/helpers/change_list_filter_actions.html,sha256=K99hHgpCLaAHxv-eqIf4nOUfq6CeTQHekEeudKTRYME,2036
|
181
181
|
unfold/templates/unfold/helpers/delete_submit_line.html,sha256=7SNS0axGytvUih9KxtOzy9ZC5rwG9u99iQxlnUZQfdE,700
|
182
182
|
unfold/templates/unfold/helpers/display_dropdown.html,sha256=IpOy8-hww4arAVjPIRsHrip30J3IEd2p-2BzD3BjIaA,2906
|
183
183
|
unfold/templates/unfold/helpers/display_header.html,sha256=2u-5Vc3mA6rS3ZlOWm3WRNLUX1wmZy4OSmGY2mdPZYs,1714
|
@@ -185,11 +185,11 @@ unfold/templates/unfold/helpers/display_label.html,sha256=LS9DWzYjHkYLV27sZDwyXl
|
|
185
185
|
unfold/templates/unfold/helpers/edit_inline/tabular_delete.html,sha256=wr8zmSUhKcoxxms6gJsBqBrANFTOXELYUvlr3XjnjnE,931
|
186
186
|
unfold/templates/unfold/helpers/edit_inline/tabular_error.html,sha256=8XGlgUJ47JllmXhwPZDlcl81NzZmvuBIp8FZBWoeu9Q,336
|
187
187
|
unfold/templates/unfold/helpers/edit_inline/tabular_field.html,sha256=QETtgDYirbFBMCRH0sRU8IkODS0fBouA6crZ_K4ufTA,1007
|
188
|
-
unfold/templates/unfold/helpers/edit_inline/tabular_heading.html,sha256=
|
188
|
+
unfold/templates/unfold/helpers/edit_inline/tabular_heading.html,sha256=wvnpGFJVHFvamGLpRCpGoP7WALFKqR1KKvVIIRhWFQc,1520
|
189
189
|
unfold/templates/unfold/helpers/edit_inline/tabular_row.html,sha256=eCyWEYvvDDCr9SR4_0ua5-GqCLIlFzgQYIZP0ip8cp8,2145
|
190
190
|
unfold/templates/unfold/helpers/edit_inline/tabular_title.html,sha256=2sk1TRzpmwy8PPPMNdf6CJx0zVSk-I2q3yX8uEPjuxE,2710
|
191
|
-
unfold/templates/unfold/helpers/empty_results.html,sha256=
|
192
|
-
unfold/templates/unfold/helpers/field.html,sha256=
|
191
|
+
unfold/templates/unfold/helpers/empty_results.html,sha256=zN1XM6_9_Oj-inMZlDxEnicYfBRr4HhwS9ODAnMiRYc,1947
|
192
|
+
unfold/templates/unfold/helpers/field.html,sha256=2q2M4dfisKJ9v8jt8gcq-iRf74t6H9W6xg16scZNF70,979
|
193
193
|
unfold/templates/unfold/helpers/field_readonly.html,sha256=4qtXjWE7SA2qZSTYLOv0lT4pQfD0TE34mvWQJY7jhS8,237
|
194
194
|
unfold/templates/unfold/helpers/field_readonly_value.html,sha256=FI_CFEsCN7ELQux9gF-IaZ7nT7jyzidqwR2Med-E52g,504
|
195
195
|
unfold/templates/unfold/helpers/fieldset_row.html,sha256=LriorPLXU4VmqstjX1oBc3T49H8CbhCrRxwQ7YfUSkI,1219
|
@@ -198,12 +198,13 @@ unfold/templates/unfold/helpers/fieldset_row_field.html,sha256=cqLT1fHsCCszOHxvY
|
|
198
198
|
unfold/templates/unfold/helpers/fieldsets_tabs.html,sha256=NRmkr_vWnEyIFZ1xLpJf_VW1H3xcDlIhMFBuElp3dIo,1468
|
199
199
|
unfold/templates/unfold/helpers/form_errors.html,sha256=mrv2_J7RPcLfVtoN1UHh3rfUyOSZpHl67wk1UGqtPcY,266
|
200
200
|
unfold/templates/unfold/helpers/form_label.html,sha256=7FfaXfviQmqKpsA1E7NSwM8rJiMNLl9e73XQram0Pfs,249
|
201
|
-
unfold/templates/unfold/helpers/header.html,sha256=
|
201
|
+
unfold/templates/unfold/helpers/header.html,sha256=cHAPz7niLLQDQbrZpURZS1hiA8OYLzkGaqnYzjgv8aE,1151
|
202
202
|
unfold/templates/unfold/helpers/header_back_button.html,sha256=lNZcYZzQRZdNSI70UrxJ-pq7xnxifziZXtSK1FoPy_U,416
|
203
203
|
unfold/templates/unfold/helpers/help_text.html,sha256=o-2_hyruIr_Xt0fo38aGgrpptPJFhddnVMPOVQOYhE4,113
|
204
204
|
unfold/templates/unfold/helpers/history.html,sha256=qxfCZxFIyl91qDpxfwozhmyVFZwULysA8Y_2H8XJ7bM,1937
|
205
205
|
unfold/templates/unfold/helpers/label.html,sha256=DRs0B08SmIvNY0QcFy78xDiI0hAKyfjExu-cm33PAaQ,911
|
206
|
-
unfold/templates/unfold/helpers/
|
206
|
+
unfold/templates/unfold/helpers/language_form.html,sha256=Ve1qfIcL4DV6cxYfhqGkC_KghDjNyEB8j3hYts1S34M,708
|
207
|
+
unfold/templates/unfold/helpers/language_switch.html,sha256=vZiYutLOWChHUQRw1OaHIYVhfzl84-BfZq14FUCKvuo,1225
|
207
208
|
unfold/templates/unfold/helpers/messages/debug.html,sha256=OIWKZp04zxWPmVaKZaEtzrikZq1kVruncYRKiKrHWds,153
|
208
209
|
unfold/templates/unfold/helpers/messages/error.html,sha256=16-4bslrpgXR1fTk8bmRUItIbnQcU5XjDgI1xesoKcc,600
|
209
210
|
unfold/templates/unfold/helpers/messages/errornote.html,sha256=3RVj4BIdft3yEUOdzmli0QPQ_l9hUAOTpHIfL4ZOpMg,356
|
@@ -211,13 +212,13 @@ unfold/templates/unfold/helpers/messages/info.html,sha256=4SCFtg3p6F33ZHJhYoIm2V
|
|
211
212
|
unfold/templates/unfold/helpers/messages/success.html,sha256=UWHpRJTvVhXiYC9-AvJ9HeEZJj-poejFgy7EgLvwpf8,157
|
212
213
|
unfold/templates/unfold/helpers/messages/warning.html,sha256=UldycPr8wdyp5vdjlkfs_yHCEvNg9PgspyzTALAjdDY,161
|
213
214
|
unfold/templates/unfold/helpers/messages.html,sha256=ISkUlIDraDAVBwASkX1tFXHo8TY1vHKmmhh8BAg123E,915
|
214
|
-
unfold/templates/unfold/helpers/navigation.html,sha256=
|
215
|
+
unfold/templates/unfold/helpers/navigation.html,sha256=U9cMmw3ETMI88zqHvSf5VQkMehcU6YfLKTcH1CmS4fY,554
|
215
216
|
unfold/templates/unfold/helpers/navigation_header.html,sha256=08_LTuJF6MrG0hK6lUI9daCP5kQr5Q7FwY7Pl4kFxJQ,1474
|
216
217
|
unfold/templates/unfold/helpers/pagination.html,sha256=N5TQDlj5kgJLj02oRiaX8W62jQtZVNoWfI2hXdpuY1g,439
|
217
218
|
unfold/templates/unfold/helpers/pagination_current_item.html,sha256=4cZ2KLVcP0Y7xuGyXgexDQ07r94cgM5Gnmtv11dkRPQ,69
|
218
219
|
unfold/templates/unfold/helpers/pagination_default.html,sha256=pseTrqaG5EOn_IpCy0GXNht3ickSkZYJ4lJaocZeI6A,496
|
219
220
|
unfold/templates/unfold/helpers/pagination_ellipsis.html,sha256=8g0KUUKtqRkXx_EBLGtsJsiYQO4tPS3GazZjxT90e0M,56
|
220
|
-
unfold/templates/unfold/helpers/pagination_infinite.html,sha256
|
221
|
+
unfold/templates/unfold/helpers/pagination_infinite.html,sha256=QyHcYb36CeuiwpukC0Y553UC4LU2tPolGos-0mh7WP0,557
|
221
222
|
unfold/templates/unfold/helpers/search.html,sha256=Pu2hxLGkN_NA-BU8_t4E7Q6uaY6hYTLoD8NZHyrcCaQ,1549
|
222
223
|
unfold/templates/unfold/helpers/search_results.html,sha256=pQx7KoDMapWDusV88qe5hxlxicfP-S9iacji1Hq41Kc,661
|
223
224
|
unfold/templates/unfold/helpers/site_branding.html,sha256=_pUyOvdjlV624eRq0wjpJkgXpn9DCDGc-0U6Mw0FupI,266
|
@@ -229,9 +230,9 @@ unfold/templates/unfold/helpers/tab_action.html,sha256=cy4JxV-wfXv9tNOTgsWXuj1bc
|
|
229
230
|
unfold/templates/unfold/helpers/tab_actions.html,sha256=Ir0HFxNAdZWdE6GuxaanSScNYONft0lNB1sZZcKMS5Q,685
|
230
231
|
unfold/templates/unfold/helpers/tab_items.html,sha256=5kZcU7R9tZKKxVLahp2siZpZf7FhrluBH1dIAIaWoAg,3377
|
231
232
|
unfold/templates/unfold/helpers/tab_list.html,sha256=mprad7Fu5ms1qGqjDl9HMmtfUodk43smd3IjagYOyr0,452
|
232
|
-
unfold/templates/unfold/helpers/theme_switch.html,sha256=
|
233
|
-
unfold/templates/unfold/helpers/userlinks.html,sha256=
|
234
|
-
unfold/templates/unfold/helpers/welcomemsg.html,sha256=
|
233
|
+
unfold/templates/unfold/helpers/theme_switch.html,sha256=Y46KKpULH_G-fKQuc5LzfSB7Pubcgj_dBJPRMwZoWxE,2408
|
234
|
+
unfold/templates/unfold/helpers/userlinks.html,sha256=bJRDQXQ_0XgxLpfmZoNgU9xpn4X6T6LOAgEmzepFXOI,740
|
235
|
+
unfold/templates/unfold/helpers/welcomemsg.html,sha256=Z3dDvozCJ5VhSVA_1go0F4ZD0lQYhCmoWqd_RM00pec,2019
|
235
236
|
unfold/templates/unfold/layouts/base.html,sha256=e9T-vuPvrySHf23LLwRuTQXUg0Q4x-6gmT_yXghqc-I,278
|
236
237
|
unfold/templates/unfold/layouts/base_simple.html,sha256=qUZ9YM24UHgWbmTl61zgN4_ty49P1FZJQ2siNbwnFnQ,1244
|
237
238
|
unfold/templates/unfold/layouts/skeleton.html,sha256=2AWjJx6TxpYbXldwrXRbtyp9XTpAu6O0U_zcJtfYfWs,4684
|
@@ -244,7 +245,7 @@ unfold/templates/unfold/widgets/radio.html,sha256=7Mgc92mMwJdVLjCxoGj5lo76KNaN5d
|
|
244
245
|
unfold/templates/unfold/widgets/radio_option.html,sha256=wVg6zIB0O44vwBgQCCphPuCXeh-gaDg6ed-0gcf5kg4,324
|
245
246
|
unfold/templates/unfold/widgets/range.html,sha256=Zhfj2VTusS3nZjOYR7slcjk1JtFK0psZbaSCw6TDY1I,294
|
246
247
|
unfold/templates/unfold/widgets/related_widget_wrapper.html,sha256=8poy8kZRGPqmY4gSXkEZt7vevBomrKoe2Lg5zsjpwiU,3919
|
247
|
-
unfold/templates/unfold/widgets/select.html,sha256=
|
248
|
+
unfold/templates/unfold/widgets/select.html,sha256=MyhlEO4sf7AUjOgH84rL76rhYM0WEn4qRqzuzPmgu5M,715
|
248
249
|
unfold/templates/unfold/widgets/split_datetime.html,sha256=Hfv2PoHxPmV_21DmBFmMcR4WVP9vTV9SrfjVdliRci8,1074
|
249
250
|
unfold/templates/unfold/widgets/split_datetime_vertical.html,sha256=39lZsRyRcKr8DIcy9oL39zC8nAHZTHwW6gyTYOKePrQ,806
|
250
251
|
unfold/templates/unfold/widgets/split_money.html,sha256=AFLUBmzGbY-RXgsfz7gaDxVRhplaIPhXjg_hWYo9xcY,352
|
@@ -254,34 +255,35 @@ unfold/templates/unfold/widgets/url.html,sha256=IRLgW44VTKN7UrSWeywJwaxQhfG5jhhX
|
|
254
255
|
unfold/templates/unfold_crispy/display_form.html,sha256=tGyr8hvMlnKkm2ILbVj0enj6IrjtqiKo6nO9Z-zHE2Q,270
|
255
256
|
unfold/templates/unfold_crispy/errors.html,sha256=bzTXuZh_UkQLb4sPaa0En5Uopveoe573TaEOM9OQVcw,132
|
256
257
|
unfold/templates/unfold_crispy/errors_formset.html,sha256=D52cx_PmIF9KSTO8WmQu0m2atpDfLIt79SPKz9LmjSE,136
|
257
|
-
unfold/templates/unfold_crispy/field.html,sha256=
|
258
|
+
unfold/templates/unfold_crispy/field.html,sha256=K8B4K28oMI914QiD_21g6NO_86_9T66t7Amxomja12c,1681
|
258
259
|
unfold/templates/unfold_crispy/inputs.html,sha256=6aMXsUY26q_JcIVYgd6X4lwbwbagWj68KHyAYk_fCN4,238
|
259
260
|
unfold/templates/unfold_crispy/layout/attrs.html,sha256=LsLlfKenzHKl6n25m4Ers2NepLSA_RBy9AqezKZ7rH8,173
|
260
261
|
unfold/templates/unfold_crispy/layout/baseinput.html,sha256=GjMxXoqpnxCPkPC1E3v_crzlxDb_hHMf_UgJYfqSsYE,440
|
261
262
|
unfold/templates/unfold_crispy/layout/button.html,sha256=evlO80en9FkbW3UayLPTNUZXAYvgr3slSAsGPKXs96M,67
|
262
263
|
unfold/templates/unfold_crispy/layout/buttonholder.html,sha256=ruHqViROk7nh4luckA8-mcfmnYBqsVM85e8j0rOi3cU,415
|
263
|
-
unfold/templates/unfold_crispy/layout/checkbox.html,sha256=
|
264
|
+
unfold/templates/unfold_crispy/layout/checkbox.html,sha256=V1YGDcYfn4spUHx6M5ux8fzfY7vrWCPCO2UfqFyAKos,769
|
264
265
|
unfold/templates/unfold_crispy/layout/column.html,sha256=Bob4xRcbJOHScDjSjLMRIMNf4lonNmm8F_JOm2azTik,172
|
265
266
|
unfold/templates/unfold_crispy/layout/div.html,sha256=RE9qQ2w2I2zpi7Z7xzVmVO03UXq0yZvMw-W7rVJkEdw,174
|
266
267
|
unfold/templates/unfold_crispy/layout/field_errors.html,sha256=N0eNJo4OvYzFHPD6vX2gSZWabm46W1GP011sd_dua1I,291
|
267
|
-
unfold/templates/unfold_crispy/layout/fieldset.html,sha256=
|
268
|
+
unfold/templates/unfold_crispy/layout/fieldset.html,sha256=hbbJVTNUOwFoBtpFMpqGaf-I4cXnQZEG5s91EUxBUzY,654
|
269
|
+
unfold/templates/unfold_crispy/layout/fieldset_subheader.html,sha256=fAD3wa9JiuYJwbo8bsmW-LhMw72V2j27EkRgy0G6Kc8,209
|
268
270
|
unfold/templates/unfold_crispy/layout/help_text.html,sha256=FY0UQv5FsoOFhrqvbILEfZE78Hj30r73YHCtg_MWNeY,207
|
269
271
|
unfold/templates/unfold_crispy/layout/help_text_and_errors.html,sha256=Um14wIg0FHthNM0mKE9VdptTrC-lTTcrDUO-UbbXxhY,108
|
270
272
|
unfold/templates/unfold_crispy/layout/hr.html,sha256=_u0V0lIdK3PLREGspx3zywhUQHcFeY7BuMUbaLyN1WU,321
|
271
273
|
unfold/templates/unfold_crispy/layout/radio_checkbox_select.html,sha256=pUlHC6j-fH62fAMiAZW-4BWXGD0RocHOKCmLtHN9pP8,997
|
272
274
|
unfold/templates/unfold_crispy/layout/row.html,sha256=MgGCI9s2mEn8C6xc78fb2Y4BsW6sbsKvgEd6aVRlFsg,184
|
273
|
-
unfold/templates/unfold_crispy/layout/table_inline_formset.html,sha256=
|
275
|
+
unfold/templates/unfold_crispy/layout/table_inline_formset.html,sha256=6c0C5jZYGuQQoJsd_mu0aHs-Jq7OzzFbUTTqyAniYB4,4705
|
274
276
|
unfold/templates/unfold_crispy/uni_form.html,sha256=l9UNCUrIycgJ0p_B6qhtO_YxdARy3aq8qYY5h5BheSo,312
|
275
277
|
unfold/templates/unfold_crispy/whole_uni_form.html,sha256=ufXRKCIGqkqKFOsh166rpKUnHpFMyBV4eYUCRhs3iws,475
|
276
278
|
unfold/templates/unfold_crispy/whole_uni_formset.html,sha256=CYksfG2hRUdi5n691KW2ih-FfBxpOU4qVBfbOvcu1zs,873
|
277
279
|
unfold/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
278
|
-
unfold/templatetags/unfold.py,sha256=
|
280
|
+
unfold/templatetags/unfold.py,sha256=wIooF34mIRmyN-9l_hKSMVYWNauH8kwL_q11J7OJ3vQ,17411
|
279
281
|
unfold/templatetags/unfold_list.py,sha256=ayShOYEXcV3o7wKt3t2aFTWvg62Mb-WGlxjYVGgk3a0,14344
|
280
282
|
unfold/typing.py,sha256=i7LM2LiwYTAjT5-OLDUPVn5b9X-DMmHnjlZG2toWwSE,692
|
281
|
-
unfold/utils.py,sha256=
|
283
|
+
unfold/utils.py,sha256=lXKkvhaTxoTtd4p3bB0wHIZD26md6XzBcDkPL5bJGH8,6191
|
282
284
|
unfold/views.py,sha256=FuYnMrlg6SegLUDDN6An__yZj8rchD_iBK8myieYhkA,1492
|
283
|
-
unfold/widgets.py,sha256=
|
284
|
-
django_unfold-0.
|
285
|
-
django_unfold-0.
|
286
|
-
django_unfold-0.
|
287
|
-
django_unfold-0.
|
285
|
+
unfold/widgets.py,sha256=z8bWwus1CYn20jp4f7tn_ChGUDCS563RZYp09I2kxIY,23216
|
286
|
+
django_unfold-0.59.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
|
287
|
+
django_unfold-0.59.0.dist-info/METADATA,sha256=AhBYGL06Dc5hTu3wW55BLYdrLmQxF_-NvvgX3cIibFY,7951
|
288
|
+
django_unfold-0.59.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
289
|
+
django_unfold-0.59.0.dist-info/RECORD,,
|
unfold/checks.py
CHANGED
@@ -2,9 +2,10 @@ from typing import Any
|
|
2
2
|
|
3
3
|
from django.contrib.admin.checks import ModelAdminChecks
|
4
4
|
from django.contrib.admin.options import BaseModelAdmin
|
5
|
+
from django.contrib.auth.models import Permission
|
5
6
|
from django.core import checks
|
6
7
|
|
7
|
-
from .dataclasses import UnfoldAction
|
8
|
+
from unfold.dataclasses import UnfoldAction
|
8
9
|
|
9
10
|
|
10
11
|
class UnfoldModelAdminChecks(ModelAdminChecks):
|
@@ -29,14 +30,35 @@ class UnfoldModelAdminChecks(ModelAdminChecks):
|
|
29
30
|
for action in actions:
|
30
31
|
if not hasattr(action.method, "allowed_permissions"):
|
31
32
|
continue
|
33
|
+
|
32
34
|
for permission in action.method.allowed_permissions:
|
35
|
+
# Check the existence of Django permission
|
36
|
+
if "." in permission:
|
37
|
+
app_label, codename = permission.split(".")
|
38
|
+
|
39
|
+
if not Permission.objects.filter(
|
40
|
+
content_type__app_label=app_label,
|
41
|
+
codename=codename,
|
42
|
+
).exists():
|
43
|
+
errors.append(
|
44
|
+
checks.Error(
|
45
|
+
f"@action decorator on {action.method.original_function_name}() in class {obj.__class__.__name__} specifies permission {permission} which does not exists.",
|
46
|
+
obj=obj.__class__,
|
47
|
+
id="admin.E129",
|
48
|
+
)
|
49
|
+
)
|
50
|
+
|
51
|
+
continue
|
52
|
+
|
53
|
+
# Check the permission method existence
|
33
54
|
method_name = f"has_{permission}_permission"
|
34
55
|
if not hasattr(obj, method_name):
|
35
56
|
errors.append(
|
36
57
|
checks.Error(
|
37
|
-
f"{obj.__class__.__name__} must define a {method_name}() method for the {action.method.
|
58
|
+
f"{obj.__class__.__name__} must define a {method_name}() method for the {action.method.original_function_name}() action.",
|
38
59
|
obj=obj.__class__,
|
39
60
|
id="admin.E129",
|
40
61
|
)
|
41
62
|
)
|
63
|
+
|
42
64
|
return errors
|
@@ -9,11 +9,11 @@
|
|
9
9
|
|
10
10
|
{% if choice.min is not None and choice.max is not None and choice.step %}
|
11
11
|
<div class="admin-numeric-filter-slider-tooltips">
|
12
|
-
<span class="admin-numeric-filter-slider-tooltip-from border cursor-not-allowed flex grow flex-row items-center mr-auto rounded-default shadow-xs px-3 py-2 w-full dark:bg-base-900 dark:border-base-700 dark:text-font-default-dark">
|
12
|
+
<span class="admin-numeric-filter-slider-tooltip-from border border-base-200 cursor-not-allowed flex grow flex-row items-center mr-auto rounded-default shadow-xs px-3 py-2 w-full dark:bg-base-900 dark:border-base-700 dark:text-font-default-dark">
|
13
13
|
{{ choice.value_from }}
|
14
14
|
</span>
|
15
15
|
|
16
|
-
<span class="admin-numeric-filter-slider-tooltip-to border cursor-not-allowed flex grow flex-row items-center rounded-default shadow-xs px-3 py-2 w-full dark:bg-base-900 dark:border-base-700 dark:text-font-default-dark">
|
16
|
+
<span class="admin-numeric-filter-slider-tooltip-to border border-base-200 cursor-not-allowed flex grow flex-row items-center rounded-default shadow-xs px-3 py-2 w-full dark:bg-base-900 dark:border-base-700 dark:text-font-default-dark">
|
17
17
|
{{ choice.value_to }}
|
18
18
|
</span>
|
19
19
|
</div>
|
@@ -1,11 +1,7 @@
|
|
1
1
|
{% extends "admin/base_site.html" %}
|
2
2
|
{% load admin_modify admin_urls i18n static %}
|
3
3
|
|
4
|
-
{% block extrastyle %}
|
5
|
-
{{ block.super }}
|
6
|
-
|
7
|
-
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />
|
8
|
-
{% endblock %}
|
4
|
+
{% block extrastyle %}{{ block.super }}{% endblock %}
|
9
5
|
|
10
6
|
{% block bodyclass %}
|
11
7
|
{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
{% include "admin/import_export/resource_fields_list.html" with import_or_export="import" %}
|
8
8
|
|
9
|
-
<fieldset class="border border-base-200 mb-8 rounded-default pt-
|
9
|
+
<fieldset class="border border-base-200 mb-8 rounded-default pt-2.5 px-3 shadow-xs dark:border-base-800">
|
10
10
|
{% for field in form %}
|
11
11
|
{% if field.field.widget.attrs.readonly %}
|
12
12
|
{% include "unfold/helpers/field_readonly.html" with title=field.label value=field.field.value %}
|
@@ -43,7 +43,7 @@
|
|
43
43
|
{% endblock %}
|
44
44
|
|
45
45
|
{% block form_top %}
|
46
|
-
<p class="px-3 py-3 rounded-default text-sm last:mb-8
|
46
|
+
<p class="px-3 py-3 rounded-default text-sm last:mb-8 bg-blue-50 mb-8 text-blue-500 dark:bg-blue-500/20">
|
47
47
|
{% if not revert_disabled %}
|
48
48
|
{% blocktrans %}Press the 'Revert' button below to revert to this version of the object.{% endblocktrans %}
|
49
49
|
{% endif %}
|
unfold/decorators.py
CHANGED
@@ -8,8 +8,7 @@ from django.db.models.expressions import BaseExpression, Combinable
|
|
8
8
|
from django.http import HttpRequest, HttpResponse
|
9
9
|
|
10
10
|
from unfold.enums import ActionVariant
|
11
|
-
|
12
|
-
from .typing import ActionFunction
|
11
|
+
from unfold.typing import ActionFunction
|
13
12
|
|
14
13
|
|
15
14
|
def action(
|
@@ -30,13 +29,19 @@ def action(
|
|
30
29
|
**kwargs,
|
31
30
|
) -> Optional[HttpResponse]:
|
32
31
|
if permissions:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
32
|
+
permission_rules = []
|
33
|
+
|
34
|
+
for permission in permissions:
|
35
|
+
if "." in permission:
|
36
|
+
permission_rules.append(permission)
|
37
|
+
else:
|
38
|
+
# Permissions methods have following syntax: has_<some>_permission(self, request, obj=None):
|
39
|
+
# But obj is not examined by default in django admin and it would also require additional
|
40
|
+
# fetch from database, therefore it is not supported yet
|
41
|
+
permission_rules.append(
|
42
|
+
getattr(model_admin, f"has_{permission}_permission")
|
43
|
+
)
|
44
|
+
|
40
45
|
has_detail_action = func.__name__ in model_admin._extract_action_names(
|
41
46
|
model_admin.actions_detail
|
42
47
|
)
|
@@ -47,12 +52,19 @@ def action(
|
|
47
52
|
)
|
48
53
|
)
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
55
|
+
permission_checks = []
|
56
|
+
|
57
|
+
for permission_rule in permission_rules:
|
58
|
+
if isinstance(permission_rule, str) and "." in permission_rule:
|
59
|
+
permission_checks.append(request.user.has_perm(permission_rule))
|
60
|
+
elif has_detail_action or has_submit_line_action:
|
61
|
+
permission_checks.append(
|
62
|
+
permission_rule(request, kwargs.get("object_id"))
|
63
|
+
)
|
64
|
+
else:
|
65
|
+
permission_checks.append(permission_rule(request))
|
66
|
+
|
67
|
+
if not all(permission_checks):
|
56
68
|
raise PermissionDenied
|
57
69
|
return func(model_admin, request, *args, **kwargs)
|
58
70
|
|
@@ -74,6 +86,7 @@ def action(
|
|
74
86
|
inner.variant = ActionVariant.DEFAULT
|
75
87
|
|
76
88
|
inner.attrs = attrs or {}
|
89
|
+
inner.original_function_name = func.__name__
|
77
90
|
return inner
|
78
91
|
|
79
92
|
if function is None:
|
unfold/fields.py
CHANGED
@@ -140,7 +140,7 @@ class UnfoldAdminReadonlyField(helpers.AdminReadonlyField):
|
|
140
140
|
):
|
141
141
|
result_repr = self.get_admin_url(f.remote_field, value)
|
142
142
|
elif isinstance(f, models.JSONField):
|
143
|
-
formatted_output = prettify_json(value)
|
143
|
+
formatted_output = prettify_json(value, f.encoder)
|
144
144
|
|
145
145
|
if formatted_output:
|
146
146
|
return formatted_output
|
unfold/forms.py
CHANGED
@@ -43,15 +43,17 @@ class ActionForm(forms.Form):
|
|
43
43
|
"class": " ".join(
|
44
44
|
[
|
45
45
|
"appearance-none",
|
46
|
-
"bg-white/20",
|
46
|
+
"!bg-white/20",
|
47
47
|
"font-medium",
|
48
48
|
"grow",
|
49
49
|
"px-3",
|
50
50
|
"py-2",
|
51
51
|
"pr-8",
|
52
52
|
"rounded-default",
|
53
|
-
"text-white",
|
53
|
+
"!text-white",
|
54
54
|
"truncate",
|
55
|
+
"!outline-primary-400",
|
56
|
+
"dark:!outline-primary-700",
|
55
57
|
"*:text-base-700",
|
56
58
|
"lg:w-72",
|
57
59
|
]
|
unfold/layout.py
CHANGED
@@ -25,6 +25,22 @@ class Button(ButtonClassesMixin, BaseInput):
|
|
25
25
|
input_type = "button"
|
26
26
|
|
27
27
|
|
28
|
+
class FieldsetSubheader(LayoutObject):
|
29
|
+
template = "unfold_crispy/layout/fieldset_subheader.html"
|
30
|
+
|
31
|
+
def __init__(self, title=None, *args, **kwargs):
|
32
|
+
self.title = title
|
33
|
+
super().__init__(*args, **kwargs)
|
34
|
+
|
35
|
+
def render(self, form, context, template_pack=TEMPLATE_PACK, **kwargs):
|
36
|
+
return render_to_string(
|
37
|
+
self.template,
|
38
|
+
{
|
39
|
+
"title": self.title,
|
40
|
+
},
|
41
|
+
)
|
42
|
+
|
43
|
+
|
28
44
|
class Hr(LayoutObject):
|
29
45
|
template = "unfold_crispy/layout/hr.html"
|
30
46
|
|
@@ -316,19 +316,27 @@ class ActionModelAdminMixin:
|
|
316
316
|
filtered_actions.append(action)
|
317
317
|
continue
|
318
318
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
319
|
+
permission_rules = []
|
320
|
+
|
321
|
+
for permission in action.method.allowed_permissions:
|
322
|
+
if "." in permission:
|
323
|
+
permission_rules.append(permission)
|
324
|
+
else:
|
325
|
+
permission_rules.append(
|
326
|
+
getattr(self, f"has_{permission}_permission")
|
327
|
+
)
|
328
|
+
|
329
|
+
permission_checks = []
|
330
|
+
|
331
|
+
for permission_rule in permission_rules:
|
332
|
+
if isinstance(permission_rule, str) and "." in permission_rule:
|
333
|
+
permission_checks.append(request.user.has_perm(permission_rule))
|
334
|
+
elif object_id:
|
335
|
+
permission_checks.append(permission_rule(request, object_id))
|
336
|
+
else:
|
337
|
+
permission_checks.append(permission_rule(request))
|
338
|
+
|
339
|
+
if all(permission_checks):
|
340
|
+
filtered_actions.append(action)
|
333
341
|
|
334
342
|
return filtered_actions
|
unfold/paginator.py
CHANGED
@@ -1,10 +1,21 @@
|
|
1
|
-
from django.core.paginator import Paginator
|
1
|
+
from django.core.paginator import Page, Paginator
|
2
2
|
from django.utils.functional import cached_property
|
3
3
|
|
4
4
|
|
5
|
+
class InfinitePage(Page):
|
6
|
+
def has_next(self):
|
7
|
+
if len(self.object_list) == 0:
|
8
|
+
return False
|
9
|
+
|
10
|
+
return self.number < self.paginator.num_pages
|
11
|
+
|
12
|
+
|
5
13
|
class InfinitePaginator(Paginator):
|
6
14
|
template_name = "unfold/helpers/pagination_infinite.html"
|
7
15
|
|
8
16
|
@cached_property
|
9
17
|
def count(self):
|
10
18
|
return 9_999_999_999
|
19
|
+
|
20
|
+
def _get_page(self, *args, **kwargs):
|
21
|
+
return InfinitePage(*args, **kwargs)
|
unfold/settings.py
CHANGED
@@ -57,10 +57,17 @@ CONFIG_DEFAULTS = {
|
|
57
57
|
"ENVIRONMENT_TITLE_PREFIX": None,
|
58
58
|
"STYLES": [],
|
59
59
|
"SCRIPTS": [],
|
60
|
+
"ACCOUNT": {
|
61
|
+
"navigation": [],
|
62
|
+
},
|
63
|
+
"LANGUAGES": {
|
64
|
+
"action": None,
|
65
|
+
"navigation": [],
|
66
|
+
},
|
60
67
|
"SIDEBAR": {
|
61
68
|
"show_search": False,
|
62
69
|
"show_all_applications": False,
|
63
|
-
"navigation":
|
70
|
+
"navigation": [],
|
64
71
|
},
|
65
72
|
"TABS": [],
|
66
73
|
"LOGIN": {
|