django-unfold 0.39.0__py3-none-any.whl → 0.40.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.
@@ -0,0 +1,69 @@
1
+ Metadata-Version: 2.1
2
+ Name: django-unfold
3
+ Version: 0.40.0
4
+ Summary: Modern Django admin theme for seamless interface development
5
+ Home-page: https://unfoldadmin.com
6
+ License: MIT
7
+ Keywords: django,admin,tailwind,theme
8
+ Requires-Python: >=3.8
9
+ Classifier: Environment :: Web Environment
10
+ Classifier: Framework :: Django
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.8
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Requires-Dist: django (>=3.2)
22
+ Project-URL: Repository, https://github.com/unfoldadmin/django-unfold
23
+ Description-Content-Type: text/markdown
24
+
25
+ ![screenshot](https://github.com/user-attachments/assets/b5ec09b6-c8c7-454a-85af-1bba97593632)
26
+
27
+ ## Unfold Django Admin Theme
28
+
29
+ [![PyPI - Version](https://img.shields.io/pypi/v/django-unfold.svg?style=for-the-badge)](https://pypi.org/project/django-unfold/)
30
+ [![Build](https://img.shields.io/github/actions/workflow/status/unfoldadmin/django-unfold/release.yml?style=for-the-badge)](https://github.com/unfoldadmin/django-unfold/actions?query=workflow%3Arelease)
31
+ ![Pre Commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge)
32
+ ![Code Style - Ruff](https://img.shields.io/badge/code%20style-ruff-30173D.svg?style=for-the-badge)
33
+
34
+ Unfold is a theme for Django admin that incorporates common best practices for building full-fledged admin areas. It is designed to work on top of the default administration provided by Django.
35
+
36
+ - **Documentation:** Full docs are available at [unfoldadmin.com](https://unfoldadmin.com?utm_medium=github&utm_source=unfold).
37
+ - **Unfold:** Demo site is available at [unfoldadmin.com](https://unfoldadmin.com?utm_medium=github&utm_source=unfold).
38
+ - **Formula:** Repository with demo implementation at [github.com/unfoldadmin/formula](https://github.com/unfoldadmin/formula?utm_medium=github&utm_source=unfold).
39
+ - **Turbo:** Django & Next.js boilerplate implementing Unfold at [github.com/unfoldadmin/turbo](https://github.com/unfoldadmin/turbo?utm_medium=github&utm_source=unfold).
40
+
41
+ ## Are you using Unfold and need help?
42
+
43
+ Have you decided to start using Unfold but don’t have time to make the switch from the native Django admin? [Get in touch with us](https://unfoldadmin.com/consulting?utm_medium=github&utm_source=unfold) and let’s supercharge your development with our expertise.
44
+
45
+ ## Features
46
+
47
+ - **Visual**: Provides a new user interface based on the Tailwind CSS framework.
48
+ - **Sidebar:** Simplifies the creation of sidebar navigation with icons, collapsibles, and more.
49
+ - **Dark mode:** Supports both light and dark mode versions.
50
+ - **Actions:** Offers multiple ways to define actions within different parts of the admin interface.
51
+ - **Filters:** Custom dropdowns, numeric, datetime, and text fields.
52
+ - **Dashboard:** Includes helpers for creating custom dashboard pages.
53
+ - **Components:** Reusable UI components such as cards, buttons, and charts.
54
+ - **WYSIWYG widget:** Built-in support for WYSIWYG (Trix).
55
+ - **Array widget:** Built-in widget for `django.contrib.postgres.fields.ArrayField`.
56
+ - **Inline tabs:** Groups inlines into tab navigation in the change form.
57
+ - **Model tabs:** Allows defining custom tab navigation for models.
58
+ - **Fieldset tabs:** Merges multiple fieldsets into tabs in the change form.
59
+ - **Environment label**: Distinguishes between environments by displaying a label.
60
+ - **Nonrelated inlines**: Displays nonrelated models as inlines in the change form.
61
+ - **Favicons**: Built-in support for configuring various site favicons.
62
+ - **Colors:** Allows customization of the default color scheme.
63
+ - **Changeform modes:** Displays fields in compressed mode in the change form.
64
+ - **Parallel admin**: Supports [running the default admin](https://unfoldadmin.com/blog/migrating-django-admin-unfold/?utm_medium=github&utm_source=unfold) alongside Unfold.
65
+ - **Third party packages:** Default support for multiple popular applications.
66
+ - **Configuration:** Most basic options can be changed in `settings.py`.
67
+ - **Dependencies:** Fully based on `django.contrib.admin`.
68
+ - **VS Code**: Project configuration and development container included.
69
+
@@ -1,5 +1,5 @@
1
1
  unfold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- unfold/admin.py,sha256=H7zKInqAGsGJbIrX0EC7GZKyXVjZ0olWBzvkIFlKpR8,19694
2
+ unfold/admin.py,sha256=GgzQctPm2zdCOd4NHfhWXFDtqmY_byvGOkFuKc7ma1Q,19757
3
3
  unfold/apps.py,sha256=SlBXPYrUd2uXn67qFbRvbXSUk3XFWrF4-5WELgDCvho,381
4
4
  unfold/checks.py,sha256=Smgji9w19hnYjJElJ_FJnnyTEAE-E-OUB6otHu7lasY,1670
5
5
  unfold/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,8 +34,8 @@ unfold/contrib/guardian/templates/admin/guardian/model/field.html,sha256=V9ZgmYi
34
34
  unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html,sha256=p7GmZOyDqj1urDAh9pyZhatnSpe-G6gXtQ_DpRK-J8k,1426
35
35
  unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html,sha256=mcm8nqyzz0-cIHQME8QLDNGZUmatwxorvnTAE82tHiU,2322
36
36
  unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html,sha256=mqASTrSSATOCJlG3G7qlWHQbLAMgLKhhKbn1klQAZAE,2320
37
- unfold/contrib/guardian/templates/unfold/guardian/group_form.html,sha256=LwBAUTk7PzFhokjdfxA93xb6U54FIGGwvcrZREwbcps,3925
38
- unfold/contrib/guardian/templates/unfold/guardian/user_form.html,sha256=SJaMowt_92CXS59dKaWoXMOgXAS4rEOJPKlvnf5gOuY,3915
37
+ unfold/contrib/guardian/templates/unfold/guardian/group_form.html,sha256=3W-CCW8eb_VAzjLHtbNYBzlxFP_wofQFl9EMO-E4ivQ,3925
38
+ unfold/contrib/guardian/templates/unfold/guardian/user_form.html,sha256=ZGcndXOn-MeFW3b2bNUr5-PFS85HxLhDoPeR7AIKQ4Q,3914
39
39
  unfold/contrib/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  unfold/contrib/import_export/apps.py,sha256=SdJu6Qh90VqGWY19FSDhhpUqhTbaIYsJKny3zX5baHI,149
41
41
  unfold/contrib/import_export/forms.py,sha256=kh8psUoTObrRb2wtkYhvRu1D5QM02xWk4UNLQT5lQZA,2038
@@ -68,12 +68,12 @@ unfold/dataclasses.py,sha256=4PAWLVlUhyGMq1Mwai7afCgrRO0Inulw0opFUKVEOBk,483
68
68
  unfold/decorators.py,sha256=jyjE2sunazp8gK1QIsNRJGEEDwO7RDKWDKnOI3GDWZE,3338
69
69
  unfold/exceptions.py,sha256=gcCj1ox61E137bk_0Cqy4YC3SttdPgB-fiJUqpmyHSE,43
70
70
  unfold/fields.py,sha256=yhtpDfqycpOxqdQlbncCg9qhELxGk3AtXizkZyzzH0g,7410
71
- unfold/forms.py,sha256=xm1xSZJBTqnTTDQymkvfzHs7RaeANC4LzB86LNDA9hU,4218
71
+ unfold/forms.py,sha256=raPZVYuZ1UQwo5qv8M6KDdprfCvRgjFnYfLdkmBRojI,4118
72
72
  unfold/settings.py,sha256=8rjtIipRX3IrkmsSy5OrbheGhjmkYvKxueihSRIM9c8,2111
73
- unfold/sites.py,sha256=yr66aXr1UYSZw9I9VRKpmkQxUtUP9336zs1GZJWJqis,13505
73
+ unfold/sites.py,sha256=JXl1-epLzodNp4--lueQZBaZ-X6JfZ0U2U1CEpvAARM,13841
74
74
  unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=alI0-yq7YPDJJJn-yg1ce79-Cv88yQDUrfaGqFZnsaY,9048
75
75
  unfold/static/unfold/css/simplebar.css,sha256=5LLaEM11pKi6JFCOLt4XKuZxTpT9rpdq_tNlaQytFlU,4647
76
- unfold/static/unfold/css/styles.css,sha256=Qfovqaj0HIvTY7IjpOjq8B08_99KX4kXl-lRBiEmBF4,97177
76
+ unfold/static/unfold/css/styles.css,sha256=XeyDlhHiJodpPBgFv9GUnCL4u_FleYXAK2frlP3C334,98178
77
77
  unfold/static/unfold/fonts/inter/Inter-Bold.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
78
78
  unfold/static/unfold/fonts/inter/Inter-Medium.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
79
79
  unfold/static/unfold/fonts/inter/Inter-Regular.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
@@ -92,26 +92,26 @@ unfold/static/unfold/js/simplebar.js,sha256=t-uG1FAD6ZoiMeN--wac0XRS7SxoDVG6zvRn
92
92
  unfold/styles.css,sha256=7BtTH3fddTLCVDdMqohVzUXePMY_xoMaufLJbyOtY7M,18226
93
93
  unfold/templates/admin/actions.html,sha256=8GqELAxzywGyfQJiQeuhGIQUakdK_WeneILY06C7mEo,2746
94
94
  unfold/templates/admin/app_index.html,sha256=lVjMIFsspHQ09LGHKfdfg7TlqlL39AX5LbwoeoZjFhk,1335
95
- unfold/templates/admin/app_list.html,sha256=aXlMo2OONF-eoTBg5kdYip8vFsu8Rb88EQhXPZEL0w8,2766
95
+ unfold/templates/admin/app_list.html,sha256=avKk-Dj_4GY_izBKWsb_yNHxUyVpdRbDBZuoxlIEdN0,2817
96
96
  unfold/templates/admin/auth/user/add_form.html,sha256=L0ylU7BLEIoZc3nS4Rq6DA0H94HQ3aXFr-iwK0vp2Bs,482
97
97
  unfold/templates/admin/auth/user/change_password.html,sha256=-Wa9ml3yss-kDz0YQxCiwoxs91KQD8eetCt5l6xekWM,2892
98
98
  unfold/templates/admin/base.html,sha256=RptiEpgXZ6seYrPu-1Stoe8ECHpi9PjkJjFheGecYF0,2358
99
99
  unfold/templates/admin/base_site.html,sha256=FM8OOaXsQqJlYapeJvBznXCOt7poMiWrweTWcsMHzeI,365
100
100
  unfold/templates/admin/change_form.html,sha256=2EKrHLNmKdg2cTmHW9N9Om6zpOxBDIzkOb6UoMKtr6U,4981
101
101
  unfold/templates/admin/change_form_object_tools.html,sha256=eyeH-i2HgEM0Yi-OJA2D1VnKJyC19A_my1IDGxxoP8Y,593
102
- unfold/templates/admin/change_list.html,sha256=DzC236cq-B8uXnb6F4bzgcQFwMLI3uKOIHNyjVtCKA0,4977
102
+ unfold/templates/admin/change_list.html,sha256=yuiCYvLa46ZBmhT-gHxQ3tHH-meiJCAEeOhVvsnexyU,5295
103
103
  unfold/templates/admin/change_list_object_tools.html,sha256=cmMiT2nT20Ph5yfpj9aHPr76Z-JP4aSXp0o-Rnad28s,147
104
104
  unfold/templates/admin/change_list_results.html,sha256=Nb-NbQYalqGJ9TRW4B1RZrS2ePhbyWtXi_K-tBn1DQs,5502
105
105
  unfold/templates/admin/date_hierarchy.html,sha256=BfUPbsLpHZVa40BHBahz1H9RSVuz36Jc3yrlobOiIpw,1306
106
106
  unfold/templates/admin/delete_confirmation.html,sha256=pg2Ei9ebjmsoM_GqaK0uasuGFYsoiFeoxsxGrOYk3kE,5082
107
107
  unfold/templates/admin/delete_selected_confirmation.html,sha256=MRh1_fC5deThAb42kyoMu3t-o9OiF7UDAbRgun23KFQ,4865
108
- unfold/templates/admin/edit_inline/stacked.html,sha256=K6sA05tN1r-6FyOePo15SF2WBbuOaA6_3FAoptWJCdk,7127
109
- unfold/templates/admin/edit_inline/tabular.html,sha256=vch3ZQ7UVw6-6roX8EYbolk8ua98uIwNQx4-FjzE3tM,14195
108
+ unfold/templates/admin/edit_inline/stacked.html,sha256=cdj3JsLoZPL92NMeqKw2IIIxKQF_BFwMsuJnRaygUfk,6638
109
+ unfold/templates/admin/edit_inline/tabular.html,sha256=o1FQcVuoxJow-TE_1BjnnZdeqRiEEM3TcUesEEjnM14,12841
110
110
  unfold/templates/admin/filter.html,sha256=wgYuP_ZmTofljsavLe4t8djAZnXRfEmz5U40SI-2Hjc,1640
111
111
  unfold/templates/admin/includes/fieldset.html,sha256=eyo5icIIrihKBLT7k3FCgoVhK55Lb78eIp7tIUNXLvU,975
112
112
  unfold/templates/admin/includes/object_delete_summary.html,sha256=w_lPVnBrng0oqvFy6rzvr8c5bzdU8GpqvYUAvaXza0c,444
113
113
  unfold/templates/admin/index.html,sha256=pkGdKWdD3zzOvkRdELvdb15sleSpfl4eHPA14PAh7z0,684
114
- unfold/templates/admin/login.html,sha256=8qSiSCjZy1D76Z0HocQvDzSA6xfXjqsZoM9Bbg4Ebas,4108
114
+ unfold/templates/admin/login.html,sha256=Xw50tZZxESEwz9YOcV1CSPeyyI2H1l0q4x4zBrC4dps,4170
115
115
  unfold/templates/admin/nav_sidebar.html,sha256=31g1dbGHe7m_8GXFrehLqWD84Nx7jEoeLhyNBZbaqRM,1163
116
116
  unfold/templates/admin/object_history.html,sha256=mRD6nbIVmnsz2OG6UsuXdI55bflY3Vs8zbIE9X-Oi74,4816
117
117
  unfold/templates/admin/pagination.html,sha256=KrwOM6gRizfpTMP59TESQaNGcQzkga2k02opl_7BxLo,1130
@@ -122,23 +122,23 @@ unfold/templates/registration/logged_out.html,sha256=cg4YjMbVtuMdOJD3hkkJZntv0G8
122
122
  unfold/templates/registration/password_change_done.html,sha256=bTZHs1KsGcRgT6WI5exF4ANFEXatgI24rIeENxJZl6Q,1070
123
123
  unfold/templates/registration/password_change_form.html,sha256=zzmqFHfMExS7czgEBdEtetXk2Ae_7jzaID7CpE_xlgo,2225
124
124
  unfold/templates/unfold/change_list_filter.html,sha256=9wP_sZF8uKmJhegPC3Z-7ZZXLwVIYDrjzzgTNxLuFbc,3344
125
- unfold/templates/unfold/components/button.html,sha256=mVb_THznqpga1onh-TGr7B679I3zDazvXBdUVOMx7Og,220
126
- unfold/templates/unfold/components/card.html,sha256=3DtjaeMvLNUBzbnnUn7zU15V2X_k2HBdxSV55S31IoA,1086
125
+ unfold/templates/unfold/components/button.html,sha256=E9B5Y0ZzUrFmw50tK8Fi8-V0V6-ONbWcBMuyoxaDjSI,476
126
+ unfold/templates/unfold/components/card.html,sha256=3HHpqXOYS1b9yPa-ipbsWHBJUuI4knmk2od5B9kMcIs,1087
127
127
  unfold/templates/unfold/components/chart/bar.html,sha256=nDdDCUXvFd793OpNgNPQo0vBmvYngMsQyPHVTf1vfOw,297
128
128
  unfold/templates/unfold/components/chart/line.html,sha256=DHaZUFTlCs5cX7ioYdTzoN4ITHWNcEoNSUp7v3hlo_E,298
129
129
  unfold/templates/unfold/components/container.html,sha256=WBk1rGHnTsObi3pJCpL3dfFAUQ2abDmokU0Lee7R9CI,83
130
130
  unfold/templates/unfold/components/flex.html,sha256=_hBsQLJ6-7MfEfXNp5Wy-ykNtPMnnNg_io2IMGegn3s,134
131
131
  unfold/templates/unfold/components/icon.html,sha256=Qlhcf41FOwNVJ-nvA0RJ_Dn6JW6PUFXO6tOR3Xtf6e8,99
132
132
  unfold/templates/unfold/components/navigation.html,sha256=KNDfB6oT_dgbD8Fy09oRt6Txw7ERHa9iv-TPyFEo2wg,892
133
- unfold/templates/unfold/components/progress.html,sha256=Dh8Q5rW5oVoRFrAxCcTbId3qI_SeA7V5V8KsmLgA8Bc,631
134
- unfold/templates/unfold/components/separator.html,sha256=IuQQu_kMgZY9D9w9-l6PHuVF0cX0bJuxcJHGXWswEhU,168
133
+ unfold/templates/unfold/components/progress.html,sha256=BnH2uC_ZL5ITvMjHiHoM0gjtbRTLNU1-tFcfCuJO0BE,808
134
+ unfold/templates/unfold/components/separator.html,sha256=TlKnvg1h3diDvm9A_FWc2atflAxb4e3HtnxYTxR75SU,168
135
135
  unfold/templates/unfold/components/table.html,sha256=iC7mhLlPLRgCaV0sVjEkxIR7A4NLV2-rSHqEbmwpaHw,2028
136
136
  unfold/templates/unfold/components/text.html,sha256=-GjxvdiaBQIaNfPSzT6SSIwnc3R27FkSDQMoF3FDPso,102
137
137
  unfold/templates/unfold/components/title.html,sha256=aMYSO30ybFYqPnqwlJVh2uNmcgnVrRycZkHTjJTjpX8,171
138
138
  unfold/templates/unfold/helpers/account_links.html,sha256=Vd80PCa91D5v3gJJKKuEJ7ycL80n54XJEo-039ELsRU,1879
139
139
  unfold/templates/unfold/helpers/actions_row.html,sha256=d80pwsZ80J1pvlBMDj9dOfC-ybZ6KV9bNGsv4Yny8ZQ,1819
140
140
  unfold/templates/unfold/helpers/add_link.html,sha256=CUFZ3quvp1JMAPmTkFRjpUXSy9GVXnIWNcRzv_gpq1A,810
141
- unfold/templates/unfold/helpers/app_list.html,sha256=mhjpBMPh13VcMKn_vg_WyCnvt6c2CJBnIvEU2bjTaog,5456
141
+ unfold/templates/unfold/helpers/app_list.html,sha256=zeMeiSK-vlxrgP-jDkIN1k1mYCog033ybBSxw5POWvs,5516
142
142
  unfold/templates/unfold/helpers/app_list_default.html,sha256=T8xXI0LsEZCyttxXZGomGMkqEd8Wxj61RCYQ4YDxlHE,3908
143
143
  unfold/templates/unfold/helpers/attrs.html,sha256=Mwpj72kuwYj8hOT3J2T8qx6f1r_4xwwaS1slHA-82jI,166
144
144
  unfold/templates/unfold/helpers/boolean.html,sha256=6gXAMEJcNVB14je9uN32dxImXP3KMCiWPeKU5EAnawA,569
@@ -172,7 +172,7 @@ unfold/templates/unfold/helpers/tab_action.html,sha256=Hq20p5yRWi-wPwkFVI5uekoAF
172
172
  unfold/templates/unfold/helpers/tab_list.html,sha256=b84OUC12G1VpiL9jD8KWU2Xtvs5A8MZRxamjVTqGv2c,4497
173
173
  unfold/templates/unfold/helpers/theme_switch.html,sha256=21r_6v7rdpv1favvw5-5uwkRMUWwsAxcghdqDP38HYw,2212
174
174
  unfold/templates/unfold/helpers/userlinks.html,sha256=qWjtBt9Q_tU8a874ii0Qqg8t_d-SSYBTB_3QZfNlx9g,634
175
- unfold/templates/unfold/helpers/welcomemsg.html,sha256=RVIIwl9GXmdWauy1Q6vaiyPGGRpc3QWSZ07VLbb7mfM,1201
175
+ unfold/templates/unfold/helpers/welcomemsg.html,sha256=u-svEbNA-lg_hYM2ZGWJWuffSjkDNyyu8qa0O-5Q0yE,1263
176
176
  unfold/templates/unfold/layouts/base.html,sha256=bAXZDbyiyxNiE-49mqr7pHUFhC2mHZQzIDUY-js_yZ0,379
177
177
  unfold/templates/unfold/layouts/base_simple.html,sha256=T37-ncKZBLNnOlsUQq90rGl3sLdRjFaxWCPG399pkbE,1179
178
178
  unfold/templates/unfold/layouts/skeleton.html,sha256=J8ch2DbrGLeKdggdtjpuVG1m7VwcJoLjfBKROsOESKI,4068
@@ -198,7 +198,7 @@ unfold/typing.py,sha256=1P8PWM2oeaceUJtA5j071RbKEBpHYaux441u7Hd6wv4,643
198
198
  unfold/utils.py,sha256=hs16AzAEtKb_tdTpLXuz3NqYhtP5JipSc_lkv5ULbbY,4921
199
199
  unfold/views.py,sha256=hQCyeeMa9kcJV1IZeeYqj8PGW7J4QWME8n-5n0UGmiU,1003
200
200
  unfold/widgets.py,sha256=HXihQ-dCvlN8uvHq1B1tzJlyBt4x800k4_5X14eiqKg,17086
201
- django_unfold-0.39.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
202
- django_unfold-0.39.0.dist-info/METADATA,sha256=_pgRxPBfnskJzqIiE0NyxPkeLH9R4vH9kgsfjehTcyU,4685
203
- django_unfold-0.39.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
204
- django_unfold-0.39.0.dist-info/RECORD,,
201
+ django_unfold-0.40.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
202
+ django_unfold-0.40.0.dist-info/METADATA,sha256=k65GzN27Ixtkay0eI2PMLrT00g23rxQh3SMbTok8APQ,4487
203
+ django_unfold-0.40.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
204
+ django_unfold-0.40.0.dist-info/RECORD,,
unfold/admin.py CHANGED
@@ -235,6 +235,8 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
235
235
  list_filter_submit = False
236
236
  list_fullwidth = False
237
237
  list_disable_select_all = False
238
+ list_before_template = None
239
+ list_after_template = None
238
240
  change_form_before_template = None
239
241
  change_form_after_template = None
240
242
  compressed_fields = False
@@ -39,9 +39,9 @@
39
39
  {% for perm in model_perms %}
40
40
  <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
41
41
  {% if perm.codename in group_perms %}
42
- {% include "unfold/helpers/boolean.html" with value=False %}
43
- {% else %}
44
42
  {% include "unfold/helpers/boolean.html" with value=True %}
43
+ {% else %}
44
+ {% include "unfold/helpers/boolean.html" with value=False %}
45
45
  {% endif %}
46
46
  </td>
47
47
  {% endfor %}
@@ -38,10 +38,10 @@
38
38
 
39
39
  {% for perm in model_perms %}
40
40
  <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
41
- {% if perm.codename in group_perms %}
42
- {% include "unfold/helpers/boolean.html" with value=False %}
43
- {% else %}
41
+ {% if perm.codename in user_perms %}
44
42
  {% include "unfold/helpers/boolean.html" with value=True %}
43
+ {% else %}
44
+ {% include "unfold/helpers/boolean.html" with value=False %}
45
45
  {% endif %}
46
46
  </td>
47
47
  {% endfor %}
unfold/forms.py CHANGED
@@ -10,6 +10,7 @@ from django.contrib.admin.forms import (
10
10
  from django.contrib.auth.forms import (
11
11
  AdminPasswordChangeForm as BaseAdminPasswordChangeForm,
12
12
  )
13
+ from django.contrib.auth.models import User
13
14
 
14
15
  try:
15
16
  from django.contrib.auth.forms import AdminUserCreationForm as BaseUserCreationForm
@@ -70,11 +71,10 @@ class AuthenticationForm(AdminAuthenticationForm):
70
71
  class UserCreationForm(BaseUserCreationForm):
71
72
  def __init__(
72
73
  self,
73
- request: Optional[HttpRequest] = None,
74
74
  *args,
75
75
  **kwargs,
76
76
  ) -> None:
77
- super().__init__(request, *args, **kwargs)
77
+ super().__init__(*args, **kwargs)
78
78
 
79
79
  self.fields["password1"].widget = UnfoldAdminPasswordInput(
80
80
  attrs={"autocomplete": "new-password"}
@@ -92,11 +92,10 @@ class UserCreationForm(BaseUserCreationForm):
92
92
  class UserChangeForm(BaseUserChangeForm):
93
93
  def __init__(
94
94
  self,
95
- request: Optional[HttpRequest] = None,
96
95
  *args,
97
96
  **kwargs,
98
97
  ) -> None:
99
- super().__init__(request, *args, **kwargs)
98
+ super().__init__(*args, **kwargs)
100
99
  self.fields["password"].widget = UnfoldReadOnlyPasswordHashWidget()
101
100
 
102
101
  self.fields["password"].help_text = _(
@@ -113,19 +112,19 @@ class UserChangeForm(BaseUserChangeForm):
113
112
  class AdminPasswordChangeForm(BaseAdminPasswordChangeForm):
114
113
  def __init__(
115
114
  self,
116
- request: Optional[HttpRequest] = None,
115
+ user: User,
117
116
  *args,
118
117
  **kwargs,
119
118
  ) -> None:
120
- super().__init__(request, *args, **kwargs)
119
+ super().__init__(user, *args, **kwargs)
121
120
 
122
121
  self.fields["password1"].widget.attrs["class"] = " ".join(INPUT_CLASSES)
123
122
  self.fields["password2"].widget.attrs["class"] = " ".join(INPUT_CLASSES)
124
123
 
125
124
 
126
125
  class AdminOwnPasswordChangeForm(BaseAdminOwnPasswordChangeForm):
127
- def __init__(self, *args, **kwargs) -> None:
128
- super().__init__(kwargs.pop("user"), *args, **kwargs)
126
+ def __init__(self, user: User, *args, **kwargs) -> None:
127
+ super().__init__(user, *args, **kwargs)
129
128
 
130
129
  self.fields["old_password"].widget.attrs["class"] = " ".join(INPUT_CLASSES)
131
130
  self.fields["new_password1"].widget.attrs["class"] = " ".join(INPUT_CLASSES)
unfold/sites.py CHANGED
@@ -7,8 +7,18 @@ from django.core.validators import EMPTY_VALUES
7
7
  from django.http import HttpRequest, HttpResponse
8
8
  from django.template.response import TemplateResponse
9
9
  from django.urls import URLPattern, path, reverse, reverse_lazy
10
+ from django.utils.decorators import method_decorator
10
11
  from django.utils.functional import lazy
11
12
  from django.utils.module_loading import import_string
13
+ from django.views.decorators.cache import never_cache
14
+
15
+ try:
16
+ from django.contrib.auth.decorators import login_not_required
17
+ except ImportError:
18
+
19
+ def login_not_required(func: Callable) -> Callable:
20
+ return func
21
+
12
22
 
13
23
  from .dataclasses import Favicon
14
24
  from .settings import get_config
@@ -178,6 +188,8 @@ class UnfoldAdminSite(AdminSite):
178
188
  },
179
189
  )
180
190
 
191
+ @method_decorator(never_cache)
192
+ @login_not_required
181
193
  def login(
182
194
  self, request: HttpRequest, extra_context: Optional[Dict[str, Any]] = None
183
195
  ) -> HttpResponse: