django-unfold 0.41.0__py3-none-any.whl → 0.42.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. {django_unfold-0.41.0.dist-info → django_unfold-0.42.0.dist-info}/METADATA +1 -1
  2. {django_unfold-0.41.0.dist-info → django_unfold-0.42.0.dist-info}/RECORD +45 -43
  3. unfold/admin.py +6 -1
  4. unfold/contrib/filters/admin.py +23 -33
  5. unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +1 -1
  6. unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +1 -1
  7. unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +1 -1
  8. unfold/contrib/import_export/templates/admin/import_export/export.html +1 -1
  9. unfold/contrib/import_export/templates/admin/import_export/import.html +1 -1
  10. unfold/contrib/simple_history/templates/simple_history/object_history_form.html +1 -1
  11. unfold/contrib/simple_history/templates/simple_history/submit_line.html +1 -1
  12. unfold/settings.py +1 -0
  13. unfold/sites.py +25 -5
  14. unfold/static/unfold/css/styles.css +1 -1
  15. unfold/static/unfold/js/app.js +21 -15
  16. unfold/styles.css +14 -1
  17. unfold/templates/admin/base.html +3 -3
  18. unfold/templates/admin/change_form.html +1 -1
  19. unfold/templates/admin/change_list.html +1 -1
  20. unfold/templates/admin/date_hierarchy.html +5 -5
  21. unfold/templates/admin/delete_confirmation.html +1 -1
  22. unfold/templates/admin/delete_selected_confirmation.html +1 -1
  23. unfold/templates/admin/edit_inline/stacked.html +8 -2
  24. unfold/templates/admin/edit_inline/tabular.html +8 -2
  25. unfold/templates/admin/object_history.html +1 -1
  26. unfold/templates/admin/submit_line.html +2 -2
  27. unfold/templates/unfold/change_list_filter.html +2 -8
  28. unfold/templates/unfold/helpers/account_links.html +1 -1
  29. unfold/templates/unfold/helpers/actions_row.html +9 -7
  30. unfold/templates/unfold/helpers/field_readonly.html +1 -1
  31. unfold/templates/unfold/helpers/form_label.html +1 -1
  32. unfold/templates/unfold/helpers/header.html +1 -1
  33. unfold/templates/unfold/helpers/label.html +1 -1
  34. unfold/templates/unfold/helpers/language_switch.html +27 -0
  35. unfold/templates/unfold/helpers/tab_list.html +3 -3
  36. unfold/templates/unfold/helpers/theme_switch.html +1 -1
  37. unfold/templates/unfold/helpers/userlinks.html +4 -0
  38. unfold/templates/unfold/layouts/base_simple.html +1 -1
  39. unfold/templates/unfold/templatetags/preserve_changelist_filters.html +3 -0
  40. unfold/templates/unfold/widgets/split_datetime_vertical.html +1 -1
  41. unfold/templatetags/unfold.py +29 -2
  42. unfold/utils.py +17 -0
  43. unfold/widgets.py +6 -2
  44. {django_unfold-0.41.0.dist-info → django_unfold-0.42.0.dist-info}/LICENSE.md +0 -0
  45. {django_unfold-0.41.0.dist-info → django_unfold-0.42.0.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-unfold
3
- Version: 0.41.0
3
+ Version: 0.42.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  Home-page: https://unfoldadmin.com
6
6
  License: MIT
@@ -1,10 +1,10 @@
1
1
  unfold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- unfold/admin.py,sha256=P9wp0ywpue56sN9WbhG3t40mzPtrTB2XVpmj7-1w7Iw,19902
2
+ unfold/admin.py,sha256=agIUptBOFAZWqxPLkf4tMaJHd5sz9IOWRNmtXkWCw0c,19971
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
6
6
  unfold/contrib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- unfold/contrib/filters/admin.py,sha256=4dwK-LCXaopQeqW3818wUiZJhkJEDLNwbDLJboVJPHk,21138
7
+ unfold/contrib/filters/admin.py,sha256=EXg7eQSVKxobhV0l7Uk4h4zSiEfUB5sJs0qLvfugqRY,21022
8
8
  unfold/contrib/filters/apps.py,sha256=wEySJy0gMLzFLb9XNKE-RexiO05X7NaQ5QmxZyziJ_k,136
9
9
  unfold/contrib/filters/forms.py,sha256=p1vfCdhBVEGmvHG0EAtv12B1Ssm2xtXuImL4R0bHOV0,5748
10
10
  unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css,sha256=rddL_jOGGVEY6wR-aw0VYovAfz5fPeAIsulrlSNb1hc,4221
@@ -31,9 +31,9 @@ unfold/contrib/guardian/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
31
31
  unfold/contrib/guardian/apps.py,sha256=ObJqwh4vHxkD4XfduP5IQAiYiWZxsXUOUqF1_R1GsRI,136
32
32
  unfold/contrib/guardian/templates/admin/guardian/model/change_form.html,sha256=FSJc4MYYWyzZAy8Ay0b7Ov-cUo-oELHOM5fQehM54Lg,403
33
33
  unfold/contrib/guardian/templates/admin/guardian/model/field.html,sha256=V9ZgmYiIQAFy3GC464y0iBOHm3SDvEEymbuhT3S0qKU,296
34
- unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html,sha256=n0XjAH9UFGiO9KWfnV2LW48L5FPEsDPxNKQMogJDpNA,1436
35
- unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html,sha256=S75GT4_wV2qivxjImzaopM-Vopa28_EdkgcxLNKD5mo,2332
36
- unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html,sha256=Cw6EkU_3W4CaH_xRLV2k8k0rCx7l-ttIT2VdWHdaRMY,2330
34
+ unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html,sha256=4C7EdB6ueuwk6EfwLURsRz8rb2DuxuB4lPxL09ZAJLg,1435
35
+ unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html,sha256=WXfRUGPrj4d7OgKFPVMOXHFTeotpdsuaO3P7Uzt8E2A,2331
36
+ unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html,sha256=vesY2_TqkTPEq4xncGfFHP9mFcAcN1oMJ990b1KUTuU,2329
37
37
  unfold/contrib/guardian/templates/unfold/guardian/group_form.html,sha256=3W-CCW8eb_VAzjLHtbNYBzlxFP_wofQFl9EMO-E4ivQ,3925
38
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
@@ -45,8 +45,8 @@ unfold/contrib/import_export/templates/admin/import_export/change_list_export.ht
45
45
  unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html,sha256=pTDeqPKOlCPKH2dxMIfPnWuc2wVDzB7AzL73WbxSnRY,257
46
46
  unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html,sha256=JdKd6P2Ot9Ou4yg4CywTauuE1UiTz_mRvDwlx3vj3LI,229
47
47
  unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html,sha256=XUuRxnsx9YQbKvW-E_JGl_ha7kpTSGSoRefOTTizuX0,233
48
- unfold/contrib/import_export/templates/admin/import_export/export.html,sha256=tz7DaApMZpIgGzlBvjKQtMCZXpoSylfCxulBZfuHLz8,3457
49
- unfold/contrib/import_export/templates/admin/import_export/import.html,sha256=_RGQ9aZjZ2aNLKmy8cCimfBuIQoeaVlHq-cuHWLqGXA,2135
48
+ unfold/contrib/import_export/templates/admin/import_export/export.html,sha256=6oI9pzY7sl6AG8ObvI9hY86gBH4DRnj6eWvp9Uw54UA,3456
49
+ unfold/contrib/import_export/templates/admin/import_export/import.html,sha256=i4LjZOLDnDKHzjHJt45vqFLVC_aBhV1A6QJZuR7CrgI,2134
50
50
  unfold/contrib/import_export/templates/admin/import_export/import_confirm.html,sha256=9DpqVW2TcrC8UrAawBP-6KIzKf0bZDNhpYIWduGTnVc,869
51
51
  unfold/contrib/import_export/templates/admin/import_export/import_errors.html,sha256=edsP56v1xeCezliXTxPIVo8mvv8rdVwh8yz0LeP5Zjk,1430
52
52
  unfold/contrib/import_export/templates/admin/import_export/import_form.html,sha256=mMuMTAbgMbJ1IyCQPBkzmob4m5lJmZ69_QSo3GvvSiY,990
@@ -61,20 +61,20 @@ unfold/contrib/inlines/forms.py,sha256=s49xrIkQTbvSMsrP4DydXWkpP1v8NCUmQw_Bcoqf0
61
61
  unfold/contrib/simple_history/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  unfold/contrib/simple_history/apps.py,sha256=eF_KVYb60CAnGgWk2Z1YKYGfgA3TJBMr229qI7e2pgU,153
63
63
  unfold/contrib/simple_history/templates/simple_history/object_history.html,sha256=vX8bIubM54WtpnCCz6Ip2c1ryisaCveUHAakRMj_qE8,751
64
- unfold/contrib/simple_history/templates/simple_history/object_history_form.html,sha256=xRn-BMlh6BAkcmbrJUIAFSnb4Ac7oznRevYAPW765Uc,2300
64
+ unfold/contrib/simple_history/templates/simple_history/object_history_form.html,sha256=Mc22IgdVTg0W2JsiI3R66wN3lPxOWwpuLcbLQYDQ7OI,2299
65
65
  unfold/contrib/simple_history/templates/simple_history/object_history_list.html,sha256=MvCaPwFwNlSr-kNSJIxBdKhWQmG4OgNJTDPWB-FWUEk,6858
66
- unfold/contrib/simple_history/templates/simple_history/submit_line.html,sha256=_otLz6Qs_tEnQIWQpKtTPll6joJaWeZb3ZoHdHXlXno,1712
66
+ unfold/contrib/simple_history/templates/simple_history/submit_line.html,sha256=UtC4DMpnIK3slH8txxNA5igBhFzjgFXErNxG5VWqR_k,1711
67
67
  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
71
  unfold/forms.py,sha256=raPZVYuZ1UQwo5qv8M6KDdprfCvRgjFnYfLdkmBRojI,4118
72
- unfold/settings.py,sha256=8rjtIipRX3IrkmsSy5OrbheGhjmkYvKxueihSRIM9c8,2111
73
- unfold/sites.py,sha256=JXl1-epLzodNp4--lueQZBaZ-X6JfZ0U2U1CEpvAARM,13841
72
+ unfold/settings.py,sha256=71ygidxvTum58iYRk8Tcujgo09nZJRjNRUQOWdFm-5s,2140
73
+ unfold/sites.py,sha256=GTClpbOENkPRallC2IrskwtgbqrbuWE5Pr5wsCoB9Us,14566
74
74
  unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=alI0-yq7YPDJJJn-yg1ce79-Cv88yQDUrfaGqFZnsaY,9048
75
75
  unfold/static/admin/js/inlines.js,sha256=-WGZO7BO07zNGAvb5ZdnR4PjqqhU29gyVMKsBn-PBUw,14577
76
76
  unfold/static/unfold/css/simplebar.css,sha256=5LLaEM11pKi6JFCOLt4XKuZxTpT9rpdq_tNlaQytFlU,4647
77
- unfold/static/unfold/css/styles.css,sha256=QEVjWuFNd3Rakym-N1QpRcHp07iHl2eFbyvrUV0bs3M,97860
77
+ unfold/static/unfold/css/styles.css,sha256=Vq9hqf8Rc3uU0Wdn13SxhdCfirf8X1_WH0Wc5CdMiNo,115794
78
78
  unfold/static/unfold/fonts/inter/Inter-Bold.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
79
79
  unfold/static/unfold/fonts/inter/Inter-Medium.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
80
80
  unfold/static/unfold/fonts/inter/Inter-Regular.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
@@ -86,44 +86,44 @@ unfold/static/unfold/js/alpine.anchor.js,sha256=2Jg9aUq749pjFynzr_H1NK3lf-nXrbHM
86
86
  unfold/static/unfold/js/alpine.js,sha256=NY2a-7GrW--i9IBhowd25bzXcH9BCmBrqYX5i8OxwDQ,44659
87
87
  unfold/static/unfold/js/alpine.persist.js,sha256=jFBwr6faTqqhp3sVi4_VTxJ0FpaF9YGZN1ZGLl_5QYM,837
88
88
  unfold/static/unfold/js/alpine.sort.js,sha256=q6LxgConwu8M8R03mZSBcsKwJv6fF7oomP8sqLxVQ0w,37891
89
- unfold/static/unfold/js/app.js,sha256=CmeP5_faLxLN8Et5VA2Ko4e1mKP63bBRzsEeBvWZ_LA,8198
89
+ unfold/static/unfold/js/app.js,sha256=BblUrP4UxZWGRcjHErfixPmC2LfYBA4dpGl2oXb-xDE,8216
90
90
  unfold/static/unfold/js/chart.js,sha256=22W6cFERR-CElMOKRgMMicueMVP0Vf7FBEBYH8Z8tCk,200633
91
91
  unfold/static/unfold/js/htmx.js,sha256=XOLqvnZiyEx46EW9vaJTBUaaWg8CGVVfXJkVsUmJbpI,42820
92
92
  unfold/static/unfold/js/select2.init.js,sha256=siSDCwzy2PsOwA0Kj26JA_ELBtZlS70O8D8f1qTMmqg,291
93
93
  unfold/static/unfold/js/simplebar.js,sha256=t-uG1FAD6ZoiMeN--wac0XRS7SxoDVG6zvRnGuEp7X8,27176
94
- unfold/styles.css,sha256=E6bg3a9QykMd5zD56huwdiEnZEKKlyg8gveK9JJwIck,18279
94
+ unfold/styles.css,sha256=sYekwcivglCDa8zVo21pCY-3XyiyXcCHMK6AVGc-eHs,18531
95
95
  unfold/templates/admin/actions.html,sha256=8GqELAxzywGyfQJiQeuhGIQUakdK_WeneILY06C7mEo,2746
96
96
  unfold/templates/admin/app_index.html,sha256=fphodUAgaL7X4pOz-QxiWOKnESEs8wRqPoShSF6iBaU,1345
97
97
  unfold/templates/admin/app_list.html,sha256=avKk-Dj_4GY_izBKWsb_yNHxUyVpdRbDBZuoxlIEdN0,2817
98
98
  unfold/templates/admin/auth/user/add_form.html,sha256=L0ylU7BLEIoZc3nS4Rq6DA0H94HQ3aXFr-iwK0vp2Bs,482
99
99
  unfold/templates/admin/auth/user/change_password.html,sha256=q7RMscF4thZisdt5CrZLugk-MWDr8DgQ-3KXDv2QlGk,2902
100
- unfold/templates/admin/base.html,sha256=5XBfcJqFgCxhZlGzLzhAzmar9OP2kXBQdbqrPjqxkKM,2368
100
+ unfold/templates/admin/base.html,sha256=9iTxs17eoeBhdUbnvq_fpq_gKmO9_D9XMnAuRdDESsE,2364
101
101
  unfold/templates/admin/base_site.html,sha256=FM8OOaXsQqJlYapeJvBznXCOt7poMiWrweTWcsMHzeI,365
102
- unfold/templates/admin/change_form.html,sha256=-tCH8kPUPTjuyhNJM_E_xUQa03rvp_z5R38Kau-PBs0,4991
102
+ unfold/templates/admin/change_form.html,sha256=U4bsIz17mk46ylgxFG8VEfnVp3FBbbCCzE7mgzMQ9es,4990
103
103
  unfold/templates/admin/change_form_object_tools.html,sha256=eyeH-i2HgEM0Yi-OJA2D1VnKJyC19A_my1IDGxxoP8Y,593
104
- unfold/templates/admin/change_list.html,sha256=gUZutYA2OIm8nXccpUQL5UMqB0LokKqgXSFklzxQw4E,5635
104
+ unfold/templates/admin/change_list.html,sha256=qpfVyQC6S-ypJZeYqPGBDvksw182d2fUH9KDmbTr9SI,5634
105
105
  unfold/templates/admin/change_list_object_tools.html,sha256=cmMiT2nT20Ph5yfpj9aHPr76Z-JP4aSXp0o-Rnad28s,147
106
106
  unfold/templates/admin/change_list_results.html,sha256=Nb-NbQYalqGJ9TRW4B1RZrS2ePhbyWtXi_K-tBn1DQs,5502
107
- unfold/templates/admin/date_hierarchy.html,sha256=BfUPbsLpHZVa40BHBahz1H9RSVuz36Jc3yrlobOiIpw,1306
108
- unfold/templates/admin/delete_confirmation.html,sha256=kv6Io5k0Y2TXbrJfZHUbZQn65qDFYO2Yn_tWmC9lLLg,4629
109
- unfold/templates/admin/delete_selected_confirmation.html,sha256=szkn7TLnmcSTODop2GH5bMcEEEEJydY2d2RYRES1LmA,4398
110
- unfold/templates/admin/edit_inline/stacked.html,sha256=o3tmGfmG4lKpN3omROTgxqMAJzL4H8dGMRZf0xoifdU,7282
111
- unfold/templates/admin/edit_inline/tabular.html,sha256=aQPKGfZxiQCgTkheIaPrTBrzB8zwlE5-CPWxZGHhXSI,14693
107
+ unfold/templates/admin/date_hierarchy.html,sha256=yMiZ3h2Sfl1JxoOHu9SmOoGvvboGOEFq20L8bPjuy2s,1411
108
+ unfold/templates/admin/delete_confirmation.html,sha256=atSK7BJyqisCNJa_xYL9FItaMkT16WpQp7bg6v51ay0,4628
109
+ unfold/templates/admin/delete_selected_confirmation.html,sha256=cVmF3XbxZbuHgUzhteFGC_vrz5goi6h5cy_XbP7twhw,4397
110
+ unfold/templates/admin/edit_inline/stacked.html,sha256=JKWBS51A_af52mgUedPc4dg5T0Gu00ehLDbUWLn866E,7733
111
+ unfold/templates/admin/edit_inline/tabular.html,sha256=ytdjFxOjBWAPokqtmfbjsNVXoFYSK3jZIRxnsZGuaGQ,15141
112
112
  unfold/templates/admin/filter.html,sha256=wgYuP_ZmTofljsavLe4t8djAZnXRfEmz5U40SI-2Hjc,1640
113
113
  unfold/templates/admin/includes/fieldset.html,sha256=eyo5icIIrihKBLT7k3FCgoVhK55Lb78eIp7tIUNXLvU,975
114
114
  unfold/templates/admin/includes/object_delete_summary.html,sha256=w_lPVnBrng0oqvFy6rzvr8c5bzdU8GpqvYUAvaXza0c,444
115
115
  unfold/templates/admin/index.html,sha256=pkGdKWdD3zzOvkRdELvdb15sleSpfl4eHPA14PAh7z0,684
116
116
  unfold/templates/admin/login.html,sha256=Xw50tZZxESEwz9YOcV1CSPeyyI2H1l0q4x4zBrC4dps,4170
117
117
  unfold/templates/admin/nav_sidebar.html,sha256=31g1dbGHe7m_8GXFrehLqWD84Nx7jEoeLhyNBZbaqRM,1163
118
- unfold/templates/admin/object_history.html,sha256=7v5bdYh5YjMg_wg0ArDtQETxUD069h-OuwkSuYy-mq0,4826
118
+ unfold/templates/admin/object_history.html,sha256=0NvY31OEO0g8JHEYVzUUhg95nJxOto2J0I_K4sMf6wc,4825
119
119
  unfold/templates/admin/pagination.html,sha256=KrwOM6gRizfpTMP59TESQaNGcQzkga2k02opl_7BxLo,1130
120
120
  unfold/templates/admin/search_form.html,sha256=NNTJ38yABrSBOet3ivkbzciYHd_I_mGHlgRvLHSL5ig,1219
121
- unfold/templates/admin/submit_line.html,sha256=Jl1gXeuM7UaBIpbRWQ6w644TRb8PkcQEs_pUZM7n2SI,4198
121
+ unfold/templates/admin/submit_line.html,sha256=ij1DDrmBRPM2DL5CnC4Aby0v55WgtsdZzrd8nUukUoE,4165
122
122
  unfold/templates/auth/widgets/read_only_password_hash.html,sha256=UK36u2lYyiY_oSWuzlH_54Kjc1RzgO3Y1VaqJPyXk_Y,754
123
123
  unfold/templates/registration/logged_out.html,sha256=cg4YjMbVtuMdOJD3hkkJZntv0G8gnzQYkDpZJVRNM2g,995
124
124
  unfold/templates/registration/password_change_done.html,sha256=MjwUFjMoM26GcQ4sduh5afNzt11HbOVFEVb4nZ6bdD8,1080
125
125
  unfold/templates/registration/password_change_form.html,sha256=YKIjlijh9wTFkCO-KWgNBxZdgx4RzXUWr4l2zO1ZNJA,2235
126
- unfold/templates/unfold/change_list_filter.html,sha256=JaZaZBGFtFmKvqU-U65HbQAt7ekdaZ7AyXZ7-GELIS8,3743
126
+ unfold/templates/unfold/change_list_filter.html,sha256=ie3M5Nau5xchwkCMfrLfDX60vyM3j_3pD5SmN2sDOx0,3456
127
127
  unfold/templates/unfold/components/button.html,sha256=E9B5Y0ZzUrFmw50tK8Fi8-V0V6-ONbWcBMuyoxaDjSI,476
128
128
  unfold/templates/unfold/components/card.html,sha256=3HHpqXOYS1b9yPa-ipbsWHBJUuI4knmk2od5B9kMcIs,1087
129
129
  unfold/templates/unfold/components/chart/bar.html,sha256=nDdDCUXvFd793OpNgNPQo0vBmvYngMsQyPHVTf1vfOw,297
@@ -137,8 +137,8 @@ unfold/templates/unfold/components/separator.html,sha256=TlKnvg1h3diDvm9A_FWc2at
137
137
  unfold/templates/unfold/components/table.html,sha256=iC7mhLlPLRgCaV0sVjEkxIR7A4NLV2-rSHqEbmwpaHw,2028
138
138
  unfold/templates/unfold/components/text.html,sha256=-GjxvdiaBQIaNfPSzT6SSIwnc3R27FkSDQMoF3FDPso,102
139
139
  unfold/templates/unfold/components/title.html,sha256=aMYSO30ybFYqPnqwlJVh2uNmcgnVrRycZkHTjJTjpX8,171
140
- unfold/templates/unfold/helpers/account_links.html,sha256=Vd80PCa91D5v3gJJKKuEJ7ycL80n54XJEo-039ELsRU,1879
141
- unfold/templates/unfold/helpers/actions_row.html,sha256=d80pwsZ80J1pvlBMDj9dOfC-ybZ6KV9bNGsv4Yny8ZQ,1819
140
+ unfold/templates/unfold/helpers/account_links.html,sha256=QRcsosWnq3cHH6UMmxGAFZTomOWubbwfn4NymFAQ-XA,1863
141
+ unfold/templates/unfold/helpers/actions_row.html,sha256=1cZ6eI-ljhuaRIeb8AQkELCwuCchom9uwOITdkhKc-4,1931
142
142
  unfold/templates/unfold/helpers/add_link.html,sha256=CUFZ3quvp1JMAPmTkFRjpUXSy9GVXnIWNcRzv_gpq1A,810
143
143
  unfold/templates/unfold/helpers/app_list.html,sha256=zeMeiSK-vlxrgP-jDkIN1k1mYCog033ybBSxw5POWvs,5516
144
144
  unfold/templates/unfold/helpers/app_list_default.html,sha256=T8xXI0LsEZCyttxXZGomGMkqEd8Wxj61RCYQ4YDxlHE,3908
@@ -149,16 +149,17 @@ unfold/templates/unfold/helpers/delete_submit_line.html,sha256=4aijRBjLFqVDZpUxU
149
149
  unfold/templates/unfold/helpers/display_header.html,sha256=HFuiSsgjrrfUFd8uwsxNiHbe4Mpt-9BeaUShgwbGGbo,1701
150
150
  unfold/templates/unfold/helpers/display_label.html,sha256=LS9DWzYjHkYLV27sZDwyXlg2sLJ0AlId9FbjnXpsbfg,317
151
151
  unfold/templates/unfold/helpers/field.html,sha256=Ds-zUHkdyxamfUCVNhxvtM0XoJg9OCA0QcsLbLWv4oo,882
152
- unfold/templates/unfold/helpers/field_readonly.html,sha256=O0gHEW46OWt1oUUk0lZiyR-mztWv_7IH6GpKRm2wUw4,235
152
+ unfold/templates/unfold/helpers/field_readonly.html,sha256=QbX4jWVFCVvW6ZxOTxcGcarLUtUoCOH5KTIBwAodRzo,237
153
153
  unfold/templates/unfold/helpers/field_readonly_value.html,sha256=E6eIJbO-Y2TWmmzpffC5F3l7KYZ8G-QxstUIHTVRjKg,461
154
154
  unfold/templates/unfold/helpers/fieldset_row.html,sha256=Eh2OO1WjqSs-wkGIo-d-ZfAE5dlp_n6lDd7uuX26_Pc,4374
155
155
  unfold/templates/unfold/helpers/fieldsets_tabs.html,sha256=GjFPlQgL-qv8bbxje5Zm1XL9v2_qFh-U3wcVvAOO5sE,1529
156
156
  unfold/templates/unfold/helpers/form_errors.html,sha256=EwerIJptSCWXvtAJ1IZKfEn98qlShBIGavsTThbklAs,266
157
- unfold/templates/unfold/helpers/form_label.html,sha256=8LkMPJjb7PhIk0U5898XM4qWl1AkNoGNHgRr06UtJQI,325
158
- unfold/templates/unfold/helpers/header.html,sha256=-wEd5_REov-lU6Od_BaZbvfQCFBZMtRGB4rQwCBWcDc,1051
157
+ unfold/templates/unfold/helpers/form_label.html,sha256=BRX3DxVQfEvcmpFcRuhl4v_icMCCd5O_zmYm6MGLtts,327
158
+ unfold/templates/unfold/helpers/header.html,sha256=Cl2rNccSi7HCf-Sl3g2YFe9DVVv6_Kw5GiV3Z0qHoaU,1050
159
159
  unfold/templates/unfold/helpers/help_text.html,sha256=o-2_hyruIr_Xt0fo38aGgrpptPJFhddnVMPOVQOYhE4,113
160
160
  unfold/templates/unfold/helpers/history.html,sha256=tfpOWNDzo2k7orcb7avfFBWVFe8Z5yVxtMkshD2C42E,1927
161
- unfold/templates/unfold/helpers/label.html,sha256=FfjLZNPGHrEzg5bG0eP3065NxlnrARUTvJDbbb6k3No,900
161
+ unfold/templates/unfold/helpers/label.html,sha256=ye13yN-yY_A9Oe_9CEUJSwCgc7wWwgNdSc1zaeUtcJ8,900
162
+ unfold/templates/unfold/helpers/language_switch.html,sha256=1B53ken8CmwOcaPzjJ7D_EP2B_ToTaMJxQLdKk47uSQ,1463
162
163
  unfold/templates/unfold/helpers/messages/error.html,sha256=mlHVdfpG2ycsKIDBJB9CZs6fM4bMGkpmJvtxHjEApjE,558
163
164
  unfold/templates/unfold/helpers/messages/errornote.html,sha256=5ChxoVYkF4jI-cw72gVHh0CRxDnG9ME_U6UQOArax2k,404
164
165
  unfold/templates/unfold/helpers/messages/info.html,sha256=js95Hm3CzqpP6_XJpnA2vG7qt8eyHmJJJcDF0e5PLtQ,143
@@ -172,13 +173,14 @@ unfold/templates/unfold/helpers/site_icon.html,sha256=MWGECpFsRJcBJiLLxDbUUKTYLN
172
173
  unfold/templates/unfold/helpers/site_logo.html,sha256=05tqXzHy--pluceRQ2jDUZCFX9DjPHdBqGaieUv9sXk,424
173
174
  unfold/templates/unfold/helpers/submit.html,sha256=oSzq85LRLhdOlbFtFZFhYm6ucT95u6LunTeSTDClszQ,206
174
175
  unfold/templates/unfold/helpers/tab_action.html,sha256=Hq20p5yRWi-wPwkFVI5uekoAFI4IlkucYr7o1qjlrYw,325
175
- unfold/templates/unfold/helpers/tab_list.html,sha256=b84OUC12G1VpiL9jD8KWU2Xtvs5A8MZRxamjVTqGv2c,4497
176
- unfold/templates/unfold/helpers/theme_switch.html,sha256=21r_6v7rdpv1favvw5-5uwkRMUWwsAxcghdqDP38HYw,2212
177
- unfold/templates/unfold/helpers/userlinks.html,sha256=qWjtBt9Q_tU8a874ii0Qqg8t_d-SSYBTB_3QZfNlx9g,634
176
+ unfold/templates/unfold/helpers/tab_list.html,sha256=MN8EzKsN7hBzTtlC71E1haSsDz2mCAhENLnVCi_00a0,4515
177
+ unfold/templates/unfold/helpers/theme_switch.html,sha256=LzMTlNEbZaMN8UpdXoVZ6_cFCX1iBd1UcmT3gmCZOYE,2196
178
+ unfold/templates/unfold/helpers/userlinks.html,sha256=yg6b17oFDzN9US7rnbzwwrmIzdull0yOc76nu2y_E-c,763
178
179
  unfold/templates/unfold/helpers/welcomemsg.html,sha256=u-svEbNA-lg_hYM2ZGWJWuffSjkDNyyu8qa0O-5Q0yE,1263
179
180
  unfold/templates/unfold/layouts/base.html,sha256=bAXZDbyiyxNiE-49mqr7pHUFhC2mHZQzIDUY-js_yZ0,379
180
- unfold/templates/unfold/layouts/base_simple.html,sha256=T37-ncKZBLNnOlsUQq90rGl3sLdRjFaxWCPG399pkbE,1179
181
+ unfold/templates/unfold/layouts/base_simple.html,sha256=Znb4SJqQ0Bk-sz4nPHrQXjLQtjmO6x1_xVtq7HxsJTI,1178
181
182
  unfold/templates/unfold/layouts/skeleton.html,sha256=IhCy6o2C7tdJKCYN5PusV6ET-rv-UHNCzwBkvVcwglM,4146
183
+ unfold/templates/unfold/templatetags/preserve_changelist_filters.html,sha256=sx2jUhogNY4emBhY8PqxQ6mXifbXQb_IQI9Hd0boJI0,111
182
184
  unfold/templates/unfold/widgets/clearable_file_input.html,sha256=MOJXfId4e5jr6wnQJlFl0lwo4s9wwOicg_hQehx9bh8,2152
183
185
  unfold/templates/unfold/widgets/clearable_file_input_small.html,sha256=rChcaCdL34mDFjQUrpYOJdzey01EOMWm7_hsyclwLE8,2802
184
186
  unfold/templates/unfold/widgets/date.html,sha256=WXo2LG1v_gBZBSg-zocj7oujMKI0MWLYCIFfB04HMLQ,122
@@ -188,20 +190,20 @@ unfold/templates/unfold/widgets/radio_option.html,sha256=UVgNUd_DuIHc4tRpnvYnJwG
188
190
  unfold/templates/unfold/widgets/range.html,sha256=oyA1EZRHotsAlLZfpy6oTiurEH4ygHnaUIAlpz99zKo,294
189
191
  unfold/templates/unfold/widgets/related_widget_wrapper.html,sha256=YqKQ0PuHmEr_vp3eq7shcM87Cs-T8P1j-FXIhUa6vp4,3830
190
192
  unfold/templates/unfold/widgets/split_datetime.html,sha256=-3nXwdQitkG_QtMXtQx76kO2_Z1F6xwPYmnjybBDLBo,1606
191
- unfold/templates/unfold/widgets/split_datetime_vertical.html,sha256=xqDpC57CrYUrQhY7sPCBU4I8qriA4Ay-TXfbVGurPgY,799
193
+ unfold/templates/unfold/widgets/split_datetime_vertical.html,sha256=39lZsRyRcKr8DIcy9oL39zC8nAHZTHwW6gyTYOKePrQ,806
192
194
  unfold/templates/unfold/widgets/split_money.html,sha256=AFLUBmzGbY-RXgsfz7gaDxVRhplaIPhXjg_hWYo9xcY,352
193
195
  unfold/templates/unfold/widgets/textarea.html,sha256=-ZLDGrtASero7L-J3VvTNq_KjPAZh_kLVw0Ow3awqXM,144
194
196
  unfold/templates/unfold/widgets/textarea_expandable.html,sha256=4xIGWb20DuwiwumndByrAyh7xF-ReXKLulSpDImX_cs,459
195
197
  unfold/templates/unfold/widgets/time.html,sha256=WXo2LG1v_gBZBSg-zocj7oujMKI0MWLYCIFfB04HMLQ,122
196
198
  unfold/templates/unfold/widgets/url.html,sha256=IRLgW44VTKN7UrSWeywJwaxQhfG5jhhXuT-KTadKX58,304
197
199
  unfold/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
- unfold/templatetags/unfold.py,sha256=jWumX0e2KIyDxz_CmIfyOu7blILxVBqUPtGi1VutaBo,6884
200
+ unfold/templatetags/unfold.py,sha256=NY6Ei1vaWiBlkVRAI1iWB-r2Ex6uCCSnNqjcmoeXgpE,7780
199
201
  unfold/templatetags/unfold_list.py,sha256=ofVee2a5WtBVNFExzqxvn8UrSxmPzczR4gF5jTbu0zU,13986
200
202
  unfold/typing.py,sha256=1P8PWM2oeaceUJtA5j071RbKEBpHYaux441u7Hd6wv4,643
201
- unfold/utils.py,sha256=hs16AzAEtKb_tdTpLXuz3NqYhtP5JipSc_lkv5ULbbY,4921
203
+ unfold/utils.py,sha256=36WgmgGRayf_fkNtjoFoI1_G9w8f8gZflNzzqQ3256U,5459
202
204
  unfold/views.py,sha256=hQCyeeMa9kcJV1IZeeYqj8PGW7J4QWME8n-5n0UGmiU,1003
203
- unfold/widgets.py,sha256=HXihQ-dCvlN8uvHq1B1tzJlyBt4x800k4_5X14eiqKg,17086
204
- django_unfold-0.41.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
205
- django_unfold-0.41.0.dist-info/METADATA,sha256=n2yv6AtcfKHGudgLMLXu3vnsICUqeVMPJHcndh0JTBo,4699
206
- django_unfold-0.41.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
207
- django_unfold-0.41.0.dist-info/RECORD,,
205
+ unfold/widgets.py,sha256=wwiAbb_7-UWvFcH3HdnTv5f26fjiQn0h5tlAK3-kXVY,17186
206
+ django_unfold-0.42.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
207
+ django_unfold-0.42.0.dist-info/METADATA,sha256=M7AC-pj3uQl6FtQpsgiCh134dsa4Gla11_BT8yZgbng,4699
208
+ django_unfold-0.42.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
209
+ django_unfold-0.42.0.dist-info/RECORD,,
unfold/admin.py CHANGED
@@ -472,7 +472,12 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
472
472
  for action in self.get_actions_row(request)
473
473
  ]
474
474
 
475
- extra_context.update({"actions_list": actions, "actions_row": actions_row})
475
+ extra_context.update(
476
+ {
477
+ "actions_list": actions,
478
+ "actions_row": actions_row,
479
+ }
480
+ )
476
481
 
477
482
  return super().changelist_view(request, extra_context)
478
483
 
@@ -16,9 +16,10 @@ from django.db.models.fields import (
16
16
  )
17
17
  from django.forms import ValidationError
18
18
  from django.http import HttpRequest
19
- from django.utils.dateparse import parse_datetime
20
19
  from django.utils.translation import gettext_lazy as _
21
20
 
21
+ from unfold.utils import parse_date_str, parse_datetime_str
22
+
22
23
  from .forms import (
23
24
  DropdownForm,
24
25
  RangeDateForm,
@@ -468,25 +469,13 @@ class RangeDateFilter(admin.FieldListFilter):
468
469
  def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
469
470
  filters = {}
470
471
 
471
- value_from = self.used_parameters.get(self.parameter_name + "_from", None)
472
+ value_from = self.used_parameters.get(self.parameter_name + "_from")
472
473
  if value_from not in EMPTY_VALUES:
473
- filters.update(
474
- {
475
- self.parameter_name + "__gte": self.used_parameters.get(
476
- self.parameter_name + "_from", None
477
- ),
478
- }
479
- )
474
+ filters.update({self.parameter_name + "__gte": parse_date_str(value_from)})
480
475
 
481
- value_to = self.used_parameters.get(self.parameter_name + "_to", None)
476
+ value_to = self.used_parameters.get(self.parameter_name + "_to")
482
477
  if value_to not in EMPTY_VALUES:
483
- filters.update(
484
- {
485
- self.parameter_name + "__lte": self.used_parameters.get(
486
- self.parameter_name + "_to", None
487
- ),
488
- }
489
- )
478
+ filters.update({self.parameter_name + "__lte": parse_date_str(value_to)})
490
479
 
491
480
  try:
492
481
  return queryset.filter(**filters)
@@ -546,18 +535,22 @@ class RangeDateTimeFilter(admin.FieldListFilter):
546
535
 
547
536
  if self.parameter_name + "_from_0" in params:
548
537
  value = params.pop(self.field_path + "_from_0")
538
+ value = value[0] if isinstance(value, list) else value
549
539
  self.used_parameters[self.field_path + "_from_0"] = value
550
540
 
551
541
  if self.parameter_name + "_from_1" in params:
552
542
  value = params.pop(self.field_path + "_from_1")
543
+ value = value[0] if isinstance(value, list) else value
553
544
  self.used_parameters[self.field_path + "_from_1"] = value
554
545
 
555
546
  if self.parameter_name + "_to_0" in params:
556
547
  value = params.pop(self.field_path + "_to_0")
548
+ value = value[0] if isinstance(value, list) else value
557
549
  self.used_parameters[self.field_path + "_to_0"] = value
558
550
 
559
551
  if self.parameter_name + "_to_1" in params:
560
552
  value = params.pop(self.field_path + "_to_1")
553
+ value = value[0] if isinstance(value, list) else value
561
554
  self.used_parameters[self.field_path + "_to_1"] = value
562
555
 
563
556
  def expected_parameters(self) -> List[str]:
@@ -571,20 +564,17 @@ class RangeDateTimeFilter(admin.FieldListFilter):
571
564
  def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
572
565
  filters = {}
573
566
 
574
- date_value_from = self.used_parameters.get(
575
- self.parameter_name + "_from_0", None
576
- )
577
- time_value_from = self.used_parameters.get(
578
- self.parameter_name + "_from_1", None
579
- )
580
- date_value_to = self.used_parameters.get(self.parameter_name + "_to_0", None)
581
- time_value_to = self.used_parameters.get(self.parameter_name + "_to_1", None)
567
+ date_value_from = self.used_parameters.get(self.parameter_name + "_from_0")
568
+ time_value_from = self.used_parameters.get(self.parameter_name + "_from_1")
569
+
570
+ date_value_to = self.used_parameters.get(self.parameter_name + "_to_0")
571
+ time_value_to = self.used_parameters.get(self.parameter_name + "_to_1")
582
572
 
583
573
  if date_value_from not in EMPTY_VALUES and time_value_from not in EMPTY_VALUES:
584
574
  filters.update(
585
575
  {
586
- f"{self.parameter_name}__gte": parse_datetime(
587
- f"{date_value_from}T{time_value_from}"
576
+ f"{self.parameter_name}__gte": parse_datetime_str(
577
+ f"{date_value_from} {time_value_from}"
588
578
  ),
589
579
  }
590
580
  )
@@ -592,8 +582,8 @@ class RangeDateTimeFilter(admin.FieldListFilter):
592
582
  if date_value_to not in EMPTY_VALUES and time_value_to not in EMPTY_VALUES:
593
583
  filters.update(
594
584
  {
595
- f"{self.parameter_name}__lte": parse_datetime(
596
- f"{date_value_to}T{time_value_to}"
585
+ f"{self.parameter_name}__lte": parse_datetime_str(
586
+ f"{date_value_to} {time_value_to}"
597
587
  ),
598
588
  }
599
589
  )
@@ -612,16 +602,16 @@ class RangeDateTimeFilter(admin.FieldListFilter):
612
602
  name=self.parameter_name,
613
603
  data={
614
604
  self.parameter_name + "_from_0": self.used_parameters.get(
615
- self.parameter_name + "_from_0", None
605
+ self.parameter_name + "_from_0"
616
606
  ),
617
607
  self.parameter_name + "_from_1": self.used_parameters.get(
618
- self.parameter_name + "_from_1", None
608
+ self.parameter_name + "_from_1"
619
609
  ),
620
610
  self.parameter_name + "_to_0": self.used_parameters.get(
621
- self.parameter_name + "_to_0", None
611
+ self.parameter_name + "_to_0"
622
612
  ),
623
613
  self.parameter_name + "_to_1": self.used_parameters.get(
624
- self.parameter_name + "_to_1", None
614
+ self.parameter_name + "_to_1"
625
615
  ),
626
616
  },
627
617
  ),
@@ -3,7 +3,7 @@
3
3
  {% load admin_urls i18n guardian_tags %}
4
4
 
5
5
  {% block breadcrumbs %}{% if not is_popup %}
6
- <div class="px-4 lg:px-12">
6
+ <div class="px-4 lg:px-8">
7
7
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
8
8
  <ul class="flex flex-wrap">
9
9
  {% url 'admin:index' as link %}
@@ -6,7 +6,7 @@
6
6
  {% endblock %}
7
7
 
8
8
  {% block breadcrumbs %}{% if not is_popup %}
9
- <div class="px-4 lg:px-12">
9
+ <div class="px-4 lg:px-8">
10
10
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
11
11
  <ul class="flex flex-wrap">
12
12
  {% url 'admin:index' as link %}
@@ -7,7 +7,7 @@
7
7
  {% endblock %}
8
8
 
9
9
  {% block breadcrumbs %}{% if not is_popup %}
10
- <div class="px-4 lg:px-12">
10
+ <div class="px-4 lg:px-8">
11
11
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
12
12
  <ul class="flex flex-wrap">
13
13
  {% url 'admin:index' as link %}
@@ -10,7 +10,7 @@
10
10
  {% endblock %}
11
11
 
12
12
  {% block breadcrumbs %}
13
- <div class="px-4 lg:px-12">
13
+ <div class="px-4 lg:px-8">
14
14
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
15
15
  <ul class="flex flex-wrap">
16
16
  {% url 'admin:index' as link %}
@@ -21,7 +21,7 @@
21
21
  {% endblock %}
22
22
 
23
23
  {% block breadcrumbs %}
24
- <div class="px-4 lg:px-12">
24
+ <div class="px-4 lg:px-8">
25
25
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
26
26
  <ul class="flex flex-wrap">
27
27
  {% url 'admin:index' as link %}
@@ -4,7 +4,7 @@
4
4
  {% load url from simple_history_compat %}
5
5
 
6
6
  {% block breadcrumbs %}
7
- <div class="px-4 lg:px-12">
7
+ <div class="px-4 lg:px-8">
8
8
  <div class="container mb-6 mx-auto -my-3 lg:mb-12">
9
9
  <ul class="flex flex-wrap">
10
10
  {% url 'admin:index' as link %}
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div {% if not is_popup %}id="submit-row"{% endif %} class="relative z-20 {% if not is_popup %} mt-20 lg:mt-8{% endif %}">
4
4
  <div class="{% if not is_popup %}bottom-0 fixed left-0 right-0{% endif %}" {% if not is_popup %}x-bind:class="{'xl:left-0': !sidebarDesktopOpen, 'xl:left-72': sidebarDesktopOpen}"{% endif %}>
5
- <div class="bg-white dark:bg-gray-900 {% if not is_popup %}border-t px-4 py-4 relative scrollable-top lg:px-12 dark:border-gray-800{% endif %}">
5
+ <div class="bg-white dark:bg-gray-900 {% if not is_popup %}border-t px-4 py-4 relative scrollable-top lg:px-8 dark:border-gray-800{% endif %}">
6
6
  <div class="container flex flex-col-reverse gap-3 items-center mx-auto lg:flex-row-reverse">
7
7
  {% if not revert_disabled %}
8
8
  <button type="submit" class="bg-primary-600 block border border-transparent font-medium px-3 py-2 rounded-md text-sm text-white w-full lg:w-auto" name="_save" {{ onclick_attrib }}>
unfold/settings.py CHANGED
@@ -12,6 +12,7 @@ CONFIG_DEFAULTS = {
12
12
  "SITE_FAVICONS": [],
13
13
  "SHOW_HISTORY": True,
14
14
  "SHOW_VIEW_ON_SITE": True,
15
+ "SHOW_LANGUAGES": False,
15
16
  "COLORS": {
16
17
  "font": {
17
18
  "subtle-light": "107 114 128", # text-gray-500
unfold/sites.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from http import HTTPStatus
2
2
  from typing import Any, Callable, Dict, List, Optional, Union
3
+ from urllib.parse import parse_qs, urlparse
3
4
 
4
5
  from django.contrib.admin import AdminSite
5
6
  from django.contrib.auth import REDIRECT_FIELD_NAME
@@ -84,6 +85,7 @@ class UnfoldAdminSite(AdminSite):
84
85
  "show_view_on_site": get_config(self.settings_name)[
85
86
  "SHOW_VIEW_ON_SITE"
86
87
  ],
88
+ "show_languages": get_config(self.settings_name)["SHOW_LANGUAGES"],
87
89
  "colors": self._process_colors(
88
90
  get_config(self.settings_name)["COLORS"]
89
91
  ),
@@ -234,6 +236,7 @@ class UnfoldAdminSite(AdminSite):
234
236
 
235
237
  def get_sidebar_list(self, request: HttpRequest) -> List[Dict[str, Any]]:
236
238
  navigation = get_config(self.settings_name)["SIDEBAR"].get("navigation", [])
239
+ tabs = get_config(self.settings_name)["TABS"]
237
240
  results = []
238
241
 
239
242
  for group in navigation:
@@ -245,7 +248,8 @@ class UnfoldAdminSite(AdminSite):
245
248
  request, item.get("link_callback") or item["link"]
246
249
  )
247
250
 
248
- for tab in get_config(self.settings_name)["TABS"]:
251
+ # Checks if any tab item is active and then marks the sidebar link as active
252
+ for tab in tabs:
249
253
  has_primary_link = False
250
254
  has_tab_link_active = False
251
255
 
@@ -302,7 +306,7 @@ class UnfoldAdminSite(AdminSite):
302
306
  item["link_callback"] = lazy(item["link"])(request)
303
307
 
304
308
  item["active"] = self._get_is_active(
305
- request, item.get("link_callback") or item["link"]
309
+ request, item.get("link_callback") or item["link"], True
306
310
  )
307
311
  allowed_items.append(item)
308
312
 
@@ -391,13 +395,29 @@ class UnfoldAdminSite(AdminSite):
391
395
 
392
396
  return colors
393
397
 
394
- def _get_is_active(self, request: HttpRequest, link: str) -> bool:
398
+ def _get_is_active(
399
+ self, request: HttpRequest, link: str, is_tab: bool = False
400
+ ) -> bool:
395
401
  if not isinstance(link, str):
396
402
  link = str(link)
397
403
 
398
- if link in request.path and link != reverse_lazy(f"{self.name}:index"):
404
+ index_path = reverse_lazy(f"{self.name}:index")
405
+ link_path = urlparse(link).path
406
+
407
+ # Dashboard
408
+ if link_path == request.path == index_path:
399
409
  return True
400
- elif link == request.path == reverse_lazy(f"{self.name}:index"):
410
+
411
+ if link_path in request.path and link_path != index_path:
412
+ query_params = parse_qs(urlparse(link).query)
413
+ request_params = parse_qs(request.GET.urlencode())
414
+
415
+ # In case of tabs, we need to check if the query params are the same
416
+ if is_tab and not all(
417
+ request_params.get(k) == v for k, v in query_params.items()
418
+ ):
419
+ return False
420
+
401
421
  return True
402
422
 
403
423
  return False