django-unfold 0.58.0__py3-none-any.whl → 0.60.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.
Files changed (60) hide show
  1. {django_unfold-0.58.0.dist-info → django_unfold-0.60.0.dist-info}/METADATA +3 -2
  2. {django_unfold-0.58.0.dist-info → django_unfold-0.60.0.dist-info}/RECORD +60 -50
  3. unfold/admin.py +45 -13
  4. unfold/checks.py +24 -2
  5. unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +2 -2
  6. unfold/contrib/inlines/admin.py +11 -6
  7. unfold/contrib/inlines/forms.py +3 -1
  8. unfold/contrib/location_field/__init__.py +0 -0
  9. unfold/contrib/location_field/apps.py +6 -0
  10. unfold/contrib/location_field/templates/location_field/map_widget.html +5 -0
  11. unfold/decorators.py +27 -13
  12. unfold/fields.py +18 -20
  13. unfold/forms.py +99 -3
  14. unfold/layout.py +16 -0
  15. unfold/mixins/action_model_admin.py +22 -14
  16. unfold/mixins/base_model_admin.py +15 -1
  17. unfold/paginator.py +12 -1
  18. unfold/settings.py +8 -1
  19. unfold/sites.py +27 -29
  20. unfold/static/admin/js/admin/RelatedObjectLookups.js +9 -3
  21. unfold/static/unfold/css/styles.css +1 -1
  22. unfold/styles.css +12 -16
  23. unfold/templates/admin/app_list.html +4 -1
  24. unfold/templates/admin/base.html +1 -1
  25. unfold/templates/admin/change_form.html +2 -1
  26. unfold/templates/admin/edit_inline/stacked.html +12 -8
  27. unfold/templates/admin/edit_inline/tabular.html +2 -0
  28. unfold/templates/admin/includes/fieldset.html +9 -3
  29. unfold/templates/admin/login.html +45 -88
  30. unfold/templates/admin/pagination.html +1 -1
  31. unfold/templates/unfold/components/button.html +10 -1
  32. unfold/templates/unfold/helpers/account_links.html +14 -6
  33. unfold/templates/unfold/helpers/app_list.html +5 -2
  34. unfold/templates/unfold/helpers/app_list_default.html +2 -1
  35. unfold/templates/unfold/helpers/change_list_actions.html +2 -2
  36. unfold/templates/unfold/helpers/change_list_filter_actions.html +1 -1
  37. unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +1 -1
  38. unfold/templates/unfold/helpers/empty_results.html +2 -2
  39. unfold/templates/unfold/helpers/field.html +5 -3
  40. unfold/templates/unfold/helpers/header.html +1 -1
  41. unfold/templates/unfold/helpers/language_form.html +10 -0
  42. unfold/templates/unfold/helpers/language_switch.html +17 -19
  43. unfold/templates/unfold/helpers/navigation.html +1 -1
  44. unfold/templates/unfold/helpers/pagination_infinite.html +3 -3
  45. unfold/templates/unfold/helpers/pagination_inline.html +28 -0
  46. unfold/templates/unfold/helpers/theme_switch.html +29 -27
  47. unfold/templates/unfold/helpers/unauthenticated_header.html +15 -0
  48. unfold/templates/unfold/helpers/unauthenticated_title.html +11 -0
  49. unfold/templates/unfold/helpers/userlinks.html +2 -6
  50. unfold/templates/unfold/helpers/welcomemsg.html +9 -7
  51. unfold/templates/unfold/layouts/unauthenticated.html +37 -0
  52. unfold/templates/unfold/widgets/select.html +1 -1
  53. unfold/templates/unfold/widgets/text.html +28 -0
  54. unfold/templates/unfold_crispy/layout/fieldset.html +3 -1
  55. unfold/templates/unfold_crispy/layout/fieldset_subheader.html +3 -0
  56. unfold/templatetags/unfold.py +37 -2
  57. unfold/utils.py +2 -2
  58. unfold/widgets.py +49 -3
  59. {django_unfold-0.58.0.dist-info → django_unfold-0.60.0.dist-info}/LICENSE.md +0 -0
  60. {django_unfold-0.58.0.dist-info → django_unfold-0.60.0.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-unfold
3
- Version: 0.58.0
3
+ Version: 0.60.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  License: MIT
6
6
  Keywords: django,admin,tailwind,theme
@@ -50,11 +50,11 @@ Unfold Studio is a theme customizer for Django admin that helps you create a bra
50
50
 
51
51
  ## Fresh Features & Enhancements
52
52
 
53
+ - **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
53
54
  - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
54
55
  - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
55
56
  - **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
56
57
  - **Site dropdown:** Configurable dropdown menu in the header area for managing custom navigation links
57
- - **Dropdown actions:** Organize action items in customizable dropdown menus
58
58
 
59
59
  ## Core Features & Capabilities
60
60
 
@@ -74,6 +74,7 @@ Unfold Studio is a theme customizer for Django admin that helps you create a bra
74
74
  - **Sortable inlines:** Allow sorting inlines by dragging and dropping
75
75
  - **Environment label:** Distinguish between environments by displaying a label
76
76
  - **Nonrelated inlines:** Display nonrelated models as inlines in the change form
77
+ - **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
77
78
  - **Favicons:** Built-in support for configuring various site favicons
78
79
  - **Themes:** Allow customization of color scheme, background color, border radius, and more
79
80
  - **Font colors:** Adjust font colors for better readability
@@ -1,7 +1,7 @@
1
1
  unfold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- unfold/admin.py,sha256=2YwKqP5slOtqpEInq_u-0-XlddY7Qnj21VeH-lsLkxg,6552
2
+ unfold/admin.py,sha256=GKntMIZnksjuAuHZQ9ppw6NlKPU_59V-EC-gEaZa61I,7451
3
3
  unfold/apps.py,sha256=SlBXPYrUd2uXn67qFbRvbXSUk3XFWrF4-5WELgDCvho,381
4
- unfold/checks.py,sha256=8I3i4xR_KgyJdpQyZUZzKNeyYf-sNzg6PAlsREuMfgI,1664
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=Z7QBmfKfpe50taQOyOPvLeOA0Uxf95u64zeA-3MJ3vM,1730
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
@@ -67,10 +67,13 @@ unfold/contrib/import_export/templates/admin/import_export/import_preview.html,s
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
69
69
  unfold/contrib/inlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- unfold/contrib/inlines/admin.py,sha256=LloGe9KaY0hb9LX0jICpWi01DcdnSCXRfpAdY9VxkiY,5929
70
+ unfold/contrib/inlines/admin.py,sha256=__U86gR2OfdEiLPmOsKwTu7t8X2be8_jL-NL1SSNb3Q,6066
71
71
  unfold/contrib/inlines/apps.py,sha256=Z9JBnzywq-DanZbD56fG0ndBfLXbojzkjVBleqoOBSU,136
72
72
  unfold/contrib/inlines/checks.py,sha256=0vkHUh-MtNSTrcOjCLbZmtI4961fFOygOv_dBAps6zw,534
73
- unfold/contrib/inlines/forms.py,sha256=s49xrIkQTbvSMsrP4DydXWkpP1v8NCUmQw_Bcoqf0i4,1322
73
+ unfold/contrib/inlines/forms.py,sha256=noZdrBgvsu9tCBbRW3f9p7o6xKSuXtWR14qbZPdZBPA,1395
74
+ unfold/contrib/location_field/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ unfold/contrib/location_field/apps.py,sha256=qbNLfWXWf9q_gZxnuwFNVj20liSk_OT29uWMAi1she8,150
76
+ unfold/contrib/location_field/templates/location_field/map_widget.html,sha256=HXNqZ7TRh8zxq7jxGv5V5De7jdB_L6smXSWX_KXujJs,179
74
77
  unfold/contrib/simple_history/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
78
  unfold/contrib/simple_history/apps.py,sha256=eF_KVYb60CAnGgWk2Z1YKYGfgA3TJBMr229qI7e2pgU,153
76
79
  unfold/contrib/simple_history/templates/simple_history/object_history.html,sha256=unZQE70be7cK6v0YPlITFeaosmiLt3kiei-pmmCjBg0,1711
@@ -78,25 +81,25 @@ unfold/contrib/simple_history/templates/simple_history/object_history_form.html,
78
81
  unfold/contrib/simple_history/templates/simple_history/object_history_list.html,sha256=PWtjuAcxciAI001qIrXLvbUxzCFl_SDAaHA5FhR16Z8,6858
79
82
  unfold/contrib/simple_history/templates/simple_history/submit_line.html,sha256=tJgOgq7lMetWF4DJoBqUYdRSY6EeRivXhOBYlyPXzTk,1750
80
83
  unfold/dataclasses.py,sha256=a-9INnkCAIcnMgoffTcB1rxWCJH33AjhMCWIGWnjWbI,719
81
- unfold/decorators.py,sha256=FZ0to60sg9fefOCpYiziG9UbV6mgmiEk0lc1wQyisXc,4302
84
+ unfold/decorators.py,sha256=jPiYFy1p0WGFn68VZhAZkYCPDF7argb9SDFaH6aemHk,4922
82
85
  unfold/enums.py,sha256=9sTfyEycMWeoGPBa-ft6ZhQGnW1vkFg108RMBVf9nko,187
83
86
  unfold/exceptions.py,sha256=gcCj1ox61E137bk_0Cqy4YC3SttdPgB-fiJUqpmyHSE,43
84
- unfold/fields.py,sha256=J3goIMlP_XOmQ85Xgh2v5MylXSP1o5I7o9_So2FQn2k,7461
85
- unfold/forms.py,sha256=xAFNBB_UqZFeg5tV2jK-_rGzwEKR9r9oaxxnpAvw3a8,4606
86
- unfold/layout.py,sha256=2fPFXDF6kTC9A2liO4P-aeOC3frlbuH7u7d8HLny6ig,1020
87
+ unfold/fields.py,sha256=h7mpRlsoFu6xQrCbehrjsBpyxFsXc-lMDzEI1JREoJk,7304
88
+ unfold/forms.py,sha256=N2VN_rhy-U0XXae1TWIZam-fJimR8YXJGm-pt_G2zp4,7747
89
+ unfold/layout.py,sha256=Q-dFTA6UlvvPCA4PsGyTkHQmBLO7PL56xBfZi-bdt0c,1459
87
90
  unfold/mixins/__init__.py,sha256=YlhoDs9Y_DXQ8Ejr3enxuHMS1-Ij9fwukxNwpeOS4Co,190
88
- unfold/mixins/action_model_admin.py,sha256=BPajuTGf7zAaZOqIq4shX8VQ3NTxWQpedvG58fmCTjk,12036
89
- unfold/mixins/base_model_admin.py,sha256=PR4eqU48yB4CNy9Bjd7fjxbOFiFpZM4etYmBOSaRX_M,4140
91
+ unfold/mixins/action_model_admin.py,sha256=9Zt4FLrQWEQSO2vrpwjzpFo_I3_yE000uEwHndsW5kg,12365
92
+ unfold/mixins/base_model_admin.py,sha256=dGxyd2ATcfMdzUlBuNOr059kbuFVLWXL8_VpHV8nV84,4611
90
93
  unfold/overrides.py,sha256=ERVY9boZiXgjDYcTEZcIp7KWoeBZ45VM_zN31yAOjyQ,2922
91
- unfold/paginator.py,sha256=vWCIfpuWbV3nvIkQOPyD7MLTg2hZplHz3rze42d-qiA,268
94
+ unfold/paginator.py,sha256=bZiEY-1kqZy_6CYGs9fHo6WntMgpnFCH-LJPoXkEESk,533
92
95
  unfold/sections.py,sha256=Lcg3xCZ76fqjm4vD4x7YdE5VsbTKluL-sX5QTEBlHxA,2379
93
- unfold/settings.py,sha256=M5LVVwatGKk6AOZBkBY_vXFntn7ENla9rqMQG0gxb0U,2753
94
- unfold/sites.py,sha256=Roo_hXNB-6X7uENluXh3yT_NPA0W3uv8Nish72QJUb8,17318
95
- unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=alI0-yq7YPDJJJn-yg1ce79-Cv88yQDUrfaGqFZnsaY,9048
96
+ unfold/settings.py,sha256=DE3hComMaWtty8o-LqdgGGcoku3mevRWJah4NH1k5B4,2879
97
+ unfold/sites.py,sha256=QY6PVMAM6CPxFytcoJP3lj40WaorSJSjSHAoHnQbg-k,17291
98
+ unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=ubKKhWmX_QborwPnaLHuQshTwQw6tK1pAViWdKIjw4E,9222
96
99
  unfold/static/admin/js/inlines.js,sha256=zcYwLGI_6RHg-gucDbbhp43RRoZd3so8bPk841KFaIE,15573
97
100
  unfold/static/unfold/css/simplebar/LICENSE,sha256=okNJf6UFl2NrEiC4iqORNBa16IKgUgV88acdcl9FbtY,1081
98
101
  unfold/static/unfold/css/simplebar/simplebar.css,sha256=5LLaEM11pKi6JFCOLt4XKuZxTpT9rpdq_tNlaQytFlU,4647
99
- unfold/static/unfold/css/styles.css,sha256=8MvwCnrFLcXnTXgB39xn4xSNV8o6q2GZIClcPEuHrzg,158422
102
+ unfold/static/unfold/css/styles.css,sha256=LqAcA9FY50-oBxSdJIf0jAWaIPW70Z4qsMgGhredRB0,158705
100
103
  unfold/static/unfold/fonts/inter/Inter-Bold.woff2,sha256=-oiBJ7baAVtlVp8DUfO1w5GtkokElR8cIOn4RiqNleo,114840
101
104
  unfold/static/unfold/fonts/inter/Inter-Medium.woff2,sha256=D_PpRhThST61VjFP0keubEqFp3g7TMhr5TmUDPg_Kkg,114348
102
105
  unfold/static/unfold/fonts/inter/Inter-Regular.woff2,sha256=4G9rG8VTqupORmgCPtCrChRxKcMQf1Ebx9A9NhsK4IU,111268
@@ -120,15 +123,15 @@ unfold/static/unfold/js/htmx/htmx.js,sha256=acrv0NqSJpBm5yXX_hdeJrnVDJYuMFZFnAxH
120
123
  unfold/static/unfold/js/select2.init.js,sha256=l0O8ggw_CkAw-QtH3qEzC8xWk0mR9QHjy4VzAjMwiQQ,1109
121
124
  unfold/static/unfold/js/simplebar/LICENSE,sha256=okNJf6UFl2NrEiC4iqORNBa16IKgUgV88acdcl9FbtY,1081
122
125
  unfold/static/unfold/js/simplebar/simplebar.js,sha256=t-uG1FAD6ZoiMeN--wac0XRS7SxoDVG6zvRnGuEp7X8,27176
123
- unfold/styles.css,sha256=4jfRd3it5Xllssqjc4xcAItlSAmbsF5tsOBut6cK4m0,21729
126
+ unfold/styles.css,sha256=nHXgzszvYC6doRZQf3UlZTVcyPsNgb5rSibZVqAxmd4,21208
124
127
  unfold/templates/admin/actions.html,sha256=iuuubcAILkOoYBgV6cpXqFIyZUh4zMqyFp0JaDFlPKU,3096
125
128
  unfold/templates/admin/app_index.html,sha256=LRR07CLcZVsYpisCOncWdMSACARNstcDt536Oydnt60,1239
126
- unfold/templates/admin/app_list.html,sha256=2JbGENeKAVqYGYwm2Yv7I0lzQrLz0xRND18kPiMIi_Q,2861
129
+ unfold/templates/admin/app_list.html,sha256=-DEZKFdmkdTq3rix_cgZurPZ1r8PHg5pBL3i7ZtzVdI,2972
127
130
  unfold/templates/admin/auth/user/add_form.html,sha256=tZgg6UoKxJ7zL6T99PLHlLBwd4LlDI2mGn6d5hmtsPs,486
128
131
  unfold/templates/admin/auth/user/change_password.html,sha256=028v1dfQTlSmdr-WCuV4lBOmFa7Oo38CsYhsXEe8ANI,2831
129
- unfold/templates/admin/base.html,sha256=lXL_Hdhfflcpd_qxZ6o7GVBdAt3kZAtnnETiYrVHKfc,2460
132
+ unfold/templates/admin/base.html,sha256=z9sU8rezHLqOZk5x13_5nvnqpRYf6XxQaMfa7N_GU68,2460
130
133
  unfold/templates/admin/base_site.html,sha256=UOsecaCycpyn_ygJNIKO7MQtDFJuHv--r83-mzaVY30,300
131
- unfold/templates/admin/change_form.html,sha256=pdH089m7iaEDMUxKCWg5OSQmte0nU2Ir8gxFzrwtwB4,5611
134
+ unfold/templates/admin/change_form.html,sha256=stW5bIL_HuxtD9Bb0RVLHZiP8ln8lGBQ3D3V6MeJbAY,5616
132
135
  unfold/templates/admin/change_form_object_tools.html,sha256=eyeH-i2HgEM0Yi-OJA2D1VnKJyC19A_my1IDGxxoP8Y,593
133
136
  unfold/templates/admin/change_list.html,sha256=49PwsDjJuTDXfoCqpUqAFc84HFNOJk8dIHSdYCQIDuk,5269
134
137
  unfold/templates/admin/change_list_object_tools.html,sha256=cmMiT2nT20Ph5yfpj9aHPr76Z-JP4aSXp0o-Rnad28s,147
@@ -136,23 +139,23 @@ unfold/templates/admin/change_list_results.html,sha256=u9eUoOTWJ9woVeLVYhftAriCX
136
139
  unfold/templates/admin/date_hierarchy.html,sha256=A-sIqBKzZTMqSn3NSHORIL1yTEAqhj4Atff0OvWtqT0,1413
137
140
  unfold/templates/admin/delete_confirmation.html,sha256=IPSGhOpxDl6hJB9LtpSg_XRkVmbDO1BpO9q_dthqkac,4635
138
141
  unfold/templates/admin/delete_selected_confirmation.html,sha256=T3NNe7pP0WM2QM4F39AbkDGsfd_d_tKYRpwxvExahgU,4399
139
- unfold/templates/admin/edit_inline/stacked.html,sha256=ee3SWRJXMTcDMc2SO5tSWXIvecdAPuGTgdcKPsz0lBo,7658
140
- unfold/templates/admin/edit_inline/tabular.html,sha256=F8o80H3GVHcGv_OARw0l5XrMPKXcgdNWX4cgorsNvkU,2948
142
+ unfold/templates/admin/edit_inline/stacked.html,sha256=MNIFkU5YI2Olwu4jNlQ-qnPTiNms4MM2j9UlYFdU108,8232
143
+ unfold/templates/admin/edit_inline/tabular.html,sha256=v-4YjGqHLMT40tv_aMua5lK5z6T19bejFvETdMK5u94,3011
141
144
  unfold/templates/admin/filter.html,sha256=DEyrLgCWuncS1O1WR0vlt1evGQFvKoZV2pABkHzSoGU,2039
142
- unfold/templates/admin/includes/fieldset.html,sha256=7ZIdu6kGit1pL3iFq_SHH7pPJohM6b3Ujmp-slB8dXI,821
145
+ unfold/templates/admin/includes/fieldset.html,sha256=QjEx8UBivPdibePGkg30xGYUS6Smcu2wIeDTHsaM0PM,1132
143
146
  unfold/templates/admin/includes/object_delete_summary.html,sha256=FgwfapZCKWtnFtTHqh1MRuxxLot4bAw92WCcR_V8ImI,444
144
147
  unfold/templates/admin/index.html,sha256=9ey6IIXxBVTEkVSDiQw01AwvMbUnG_h0B08N1Zg3wTg,578
145
- unfold/templates/admin/login.html,sha256=cdyH_AGQxANC7D8Bcj-KnCRVQ9tWBT3LFwPBJmhYVaY,4590
148
+ unfold/templates/admin/login.html,sha256=W07Dtr3-YQ-JP1jYKZMsBxrmO1u49A5R4UZyOUmZYfY,2465
146
149
  unfold/templates/admin/nav_sidebar.html,sha256=xvCaXOamXawmf80NhE0OwjjjuNwoyoePS--lsdqDeIE,772
147
150
  unfold/templates/admin/object_history.html,sha256=t-iJFQnpstowwsabGGA-FQjmcT1KIKhKLKbQ3iVELkk,4832
148
- unfold/templates/admin/pagination.html,sha256=Jc8kqZp2LMZ1xdJCGg2O5YB1lgcUG9nm-sXTWaW9Ckc,897
151
+ unfold/templates/admin/pagination.html,sha256=-9kjc_lKEeqvDVHMrnTfnlXDxMSkM8GNRGZGuI9D8os,912
149
152
  unfold/templates/admin/search_form.html,sha256=ebd6ccOASaIUQsOZ0mVkcoB-EiKLqkN7y7cEm3fwsL8,1360
150
153
  unfold/templates/admin/submit_line.html,sha256=GvknbdmXXEw93BIQ8azUHhnQ1AcojExgGiSr0XaNg2A,4658
151
154
  unfold/templates/auth/widgets/read_only_password_hash.html,sha256=MlaNXJ2PLEbv8Nd01BBp-AQEfMB13LNxD_DzRemXhCg,775
152
155
  unfold/templates/registration/logged_out.html,sha256=oIdaqGcvIdBih3yNnUkXSEpvofRsBJ77obldnhcnP2U,997
153
156
  unfold/templates/registration/password_change_done.html,sha256=ITV6Fug4S6YG3WG-O1cm-sDAXTHEXPcNZ_w2x1IQFu8,1006
154
157
  unfold/templates/registration/password_change_form.html,sha256=-8AauxUHWHXVaokG269UsETY_FHKqU83Zx38ZzrAA1A,2159
155
- unfold/templates/unfold/components/button.html,sha256=19z4DHnhVmq2wL2WyvoZxtNu8xGCAKXGuDa2snZTF50,630
158
+ unfold/templates/unfold/components/button.html,sha256=RlNNIa_JmcsNFH151ECHkbB2TxpgeCPRh-eW1Bc0Xtk,933
156
159
  unfold/templates/unfold/components/card.html,sha256=N9ld_SWpXdmaqAea9bboy0bTg1YqIkAhsJmOj7nd0qs,1353
157
160
  unfold/templates/unfold/components/chart/bar.html,sha256=nDdDCUXvFd793OpNgNPQo0vBmvYngMsQyPHVTf1vfOw,297
158
161
  unfold/templates/unfold/components/chart/cohort.html,sha256=L00WR-igYv0C3t2yT_nZqeI-M5gVHpoaGv5RooRojqU,2402
@@ -167,17 +170,17 @@ unfold/templates/unfold/components/table.html,sha256=VVMTrrDy_Oq09MG9aNAsnMZfXSp
167
170
  unfold/templates/unfold/components/text.html,sha256=-GjxvdiaBQIaNfPSzT6SSIwnc3R27FkSDQMoF3FDPso,102
168
171
  unfold/templates/unfold/components/title.html,sha256=aMYSO30ybFYqPnqwlJVh2uNmcgnVrRycZkHTjJTjpX8,171
169
172
  unfold/templates/unfold/components/tracker.html,sha256=krlvsb06lpfdOIANsyrBOoLq1sgv6rXUGr-7MmP5Le0,292
170
- unfold/templates/unfold/helpers/account_links.html,sha256=bQC-VnzIKpeOCrEL0rlN_ZLiKb7e2LZM7-i4lr7LgBU,1948
173
+ unfold/templates/unfold/helpers/account_links.html,sha256=Tq30bAkOU8QRR6CaB1CvTfTgkoPP5dz2v0OHYq0pRSE,2348
171
174
  unfold/templates/unfold/helpers/actions_row.html,sha256=RqhZsxgIFR-r1casv5CueL81uxNl8rA3XuCMDP--zLA,2586
172
175
  unfold/templates/unfold/helpers/add_link.html,sha256=Z0TzUavXH8AQ7A-I0SQ79t-UI87dyP_PZEpsDrm13Q8,810
173
- unfold/templates/unfold/helpers/app_list.html,sha256=AoTyb-0jQTnnAtPmXtiN52oEaeIbdtQZgzqqZZhquOc,5744
174
- unfold/templates/unfold/helpers/app_list_default.html,sha256=LbyLT9xYgev0xXwprkXOghtqqVhcRwGS4CPXeJQnR-8,3918
176
+ unfold/templates/unfold/helpers/app_list.html,sha256=baydU9R_xmH9pWgs8B7PUcwTWcLxHDhD1ehs75c5PD0,5879
177
+ unfold/templates/unfold/helpers/app_list_default.html,sha256=0TR2ZTy0KUqa6YR8IgihA_4RQqBIFOroYpRHHIyD4H8,4015
175
178
  unfold/templates/unfold/helpers/attrs.html,sha256=Mwpj72kuwYj8hOT3J2T8qx6f1r_4xwwaS1slHA-82jI,166
176
179
  unfold/templates/unfold/helpers/boolean.html,sha256=kcSZr3siQeBWIy_jsx1tFf4m6IB3ooRnu8UUNQrh6so,569
177
180
  unfold/templates/unfold/helpers/breadcrumb_item.html,sha256=9T6ojN7LOXIlgwSwlIwHgy5U22eQYtarCqcmzsQIoPU,201
178
- unfold/templates/unfold/helpers/change_list_actions.html,sha256=XceGYsclqM5atPtN8NC3dffHh_R78mt-OD9QLONqdr8,651
181
+ unfold/templates/unfold/helpers/change_list_actions.html,sha256=xuFMZel6kH014H9sl0hKvQo7LP0UxwlhFQHIUeyQxVM,643
179
182
  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=K32esRWcttvg8_9YvFMDurvUhL71SHjpqBSJv-ll0Po,2037
183
+ unfold/templates/unfold/helpers/change_list_filter_actions.html,sha256=K99hHgpCLaAHxv-eqIf4nOUfq6CeTQHekEeudKTRYME,2036
181
184
  unfold/templates/unfold/helpers/delete_submit_line.html,sha256=7SNS0axGytvUih9KxtOzy9ZC5rwG9u99iQxlnUZQfdE,700
182
185
  unfold/templates/unfold/helpers/display_dropdown.html,sha256=IpOy8-hww4arAVjPIRsHrip30J3IEd2p-2BzD3BjIaA,2906
183
186
  unfold/templates/unfold/helpers/display_header.html,sha256=2u-5Vc3mA6rS3ZlOWm3WRNLUX1wmZy4OSmGY2mdPZYs,1714
@@ -185,11 +188,11 @@ unfold/templates/unfold/helpers/display_label.html,sha256=LS9DWzYjHkYLV27sZDwyXl
185
188
  unfold/templates/unfold/helpers/edit_inline/tabular_delete.html,sha256=wr8zmSUhKcoxxms6gJsBqBrANFTOXELYUvlr3XjnjnE,931
186
189
  unfold/templates/unfold/helpers/edit_inline/tabular_error.html,sha256=8XGlgUJ47JllmXhwPZDlcl81NzZmvuBIp8FZBWoeu9Q,336
187
190
  unfold/templates/unfold/helpers/edit_inline/tabular_field.html,sha256=QETtgDYirbFBMCRH0sRU8IkODS0fBouA6crZ_K4ufTA,1007
188
- unfold/templates/unfold/helpers/edit_inline/tabular_heading.html,sha256=ER8R64wnKOu26WTwP4_Wxt-LRB_zRkXLhheZ_utVvKY,1523
191
+ unfold/templates/unfold/helpers/edit_inline/tabular_heading.html,sha256=wvnpGFJVHFvamGLpRCpGoP7WALFKqR1KKvVIIRhWFQc,1520
189
192
  unfold/templates/unfold/helpers/edit_inline/tabular_row.html,sha256=eCyWEYvvDDCr9SR4_0ua5-GqCLIlFzgQYIZP0ip8cp8,2145
190
193
  unfold/templates/unfold/helpers/edit_inline/tabular_title.html,sha256=2sk1TRzpmwy8PPPMNdf6CJx0zVSk-I2q3yX8uEPjuxE,2710
191
- unfold/templates/unfold/helpers/empty_results.html,sha256=Sbp1dOgazpbSwyiX1CT-Arbe51V79MhV8w9IAiHRIE0,1963
192
- unfold/templates/unfold/helpers/field.html,sha256=2q2M4dfisKJ9v8jt8gcq-iRf74t6H9W6xg16scZNF70,979
194
+ unfold/templates/unfold/helpers/empty_results.html,sha256=zN1XM6_9_Oj-inMZlDxEnicYfBRr4HhwS9ODAnMiRYc,1947
195
+ unfold/templates/unfold/helpers/field.html,sha256=KEs1SQRxzJ0x11zithlxVyv5zfQ9a_XGoJJ9AiWk1Vc,1038
193
196
  unfold/templates/unfold/helpers/field_readonly.html,sha256=4qtXjWE7SA2qZSTYLOv0lT4pQfD0TE34mvWQJY7jhS8,237
194
197
  unfold/templates/unfold/helpers/field_readonly_value.html,sha256=FI_CFEsCN7ELQux9gF-IaZ7nT7jyzidqwR2Med-E52g,504
195
198
  unfold/templates/unfold/helpers/fieldset_row.html,sha256=LriorPLXU4VmqstjX1oBc3T49H8CbhCrRxwQ7YfUSkI,1219
@@ -198,12 +201,13 @@ unfold/templates/unfold/helpers/fieldset_row_field.html,sha256=cqLT1fHsCCszOHxvY
198
201
  unfold/templates/unfold/helpers/fieldsets_tabs.html,sha256=NRmkr_vWnEyIFZ1xLpJf_VW1H3xcDlIhMFBuElp3dIo,1468
199
202
  unfold/templates/unfold/helpers/form_errors.html,sha256=mrv2_J7RPcLfVtoN1UHh3rfUyOSZpHl67wk1UGqtPcY,266
200
203
  unfold/templates/unfold/helpers/form_label.html,sha256=7FfaXfviQmqKpsA1E7NSwM8rJiMNLl9e73XQram0Pfs,249
201
- unfold/templates/unfold/helpers/header.html,sha256=hTLE7_1VCCp-XqmU4xBrFA4Rtb0-8q-I7goP1sOGKg0,1123
204
+ unfold/templates/unfold/helpers/header.html,sha256=cHAPz7niLLQDQbrZpURZS1hiA8OYLzkGaqnYzjgv8aE,1151
202
205
  unfold/templates/unfold/helpers/header_back_button.html,sha256=lNZcYZzQRZdNSI70UrxJ-pq7xnxifziZXtSK1FoPy_U,416
203
206
  unfold/templates/unfold/helpers/help_text.html,sha256=o-2_hyruIr_Xt0fo38aGgrpptPJFhddnVMPOVQOYhE4,113
204
207
  unfold/templates/unfold/helpers/history.html,sha256=qxfCZxFIyl91qDpxfwozhmyVFZwULysA8Y_2H8XJ7bM,1937
205
208
  unfold/templates/unfold/helpers/label.html,sha256=DRs0B08SmIvNY0QcFy78xDiI0hAKyfjExu-cm33PAaQ,911
206
- unfold/templates/unfold/helpers/language_switch.html,sha256=Y3VxZW0JhqBImLQf2PY11gA_J1CWhbo5LouxoNgzawU,1516
209
+ unfold/templates/unfold/helpers/language_form.html,sha256=Ve1qfIcL4DV6cxYfhqGkC_KghDjNyEB8j3hYts1S34M,708
210
+ unfold/templates/unfold/helpers/language_switch.html,sha256=vZiYutLOWChHUQRw1OaHIYVhfzl84-BfZq14FUCKvuo,1225
207
211
  unfold/templates/unfold/helpers/messages/debug.html,sha256=OIWKZp04zxWPmVaKZaEtzrikZq1kVruncYRKiKrHWds,153
208
212
  unfold/templates/unfold/helpers/messages/error.html,sha256=16-4bslrpgXR1fTk8bmRUItIbnQcU5XjDgI1xesoKcc,600
209
213
  unfold/templates/unfold/helpers/messages/errornote.html,sha256=3RVj4BIdft3yEUOdzmli0QPQ_l9hUAOTpHIfL4ZOpMg,356
@@ -211,13 +215,14 @@ unfold/templates/unfold/helpers/messages/info.html,sha256=4SCFtg3p6F33ZHJhYoIm2V
211
215
  unfold/templates/unfold/helpers/messages/success.html,sha256=UWHpRJTvVhXiYC9-AvJ9HeEZJj-poejFgy7EgLvwpf8,157
212
216
  unfold/templates/unfold/helpers/messages/warning.html,sha256=UldycPr8wdyp5vdjlkfs_yHCEvNg9PgspyzTALAjdDY,161
213
217
  unfold/templates/unfold/helpers/messages.html,sha256=ISkUlIDraDAVBwASkX1tFXHo8TY1vHKmmhh8BAg123E,915
214
- unfold/templates/unfold/helpers/navigation.html,sha256=IPE9Z48XTuI2q72sNJcFTPXDn8_F2FhzgvipTymnFck,526
218
+ unfold/templates/unfold/helpers/navigation.html,sha256=U9cMmw3ETMI88zqHvSf5VQkMehcU6YfLKTcH1CmS4fY,554
215
219
  unfold/templates/unfold/helpers/navigation_header.html,sha256=08_LTuJF6MrG0hK6lUI9daCP5kQr5Q7FwY7Pl4kFxJQ,1474
216
220
  unfold/templates/unfold/helpers/pagination.html,sha256=N5TQDlj5kgJLj02oRiaX8W62jQtZVNoWfI2hXdpuY1g,439
217
221
  unfold/templates/unfold/helpers/pagination_current_item.html,sha256=4cZ2KLVcP0Y7xuGyXgexDQ07r94cgM5Gnmtv11dkRPQ,69
218
222
  unfold/templates/unfold/helpers/pagination_default.html,sha256=pseTrqaG5EOn_IpCy0GXNht3ickSkZYJ4lJaocZeI6A,496
219
223
  unfold/templates/unfold/helpers/pagination_ellipsis.html,sha256=8g0KUUKtqRkXx_EBLGtsJsiYQO4tPS3GazZjxT90e0M,56
220
- unfold/templates/unfold/helpers/pagination_infinite.html,sha256=-U1i-90jxzJVui56NvuJ1OxrywN8QLrs-IRu9KLmN20,422
224
+ unfold/templates/unfold/helpers/pagination_infinite.html,sha256=QyHcYb36CeuiwpukC0Y553UC4LU2tPolGos-0mh7WP0,557
225
+ unfold/templates/unfold/helpers/pagination_inline.html,sha256=wFuXDvW1p-9OF1FSlOERkhP1Jt1WLzNfN7UkqsHtOQ4,1414
221
226
  unfold/templates/unfold/helpers/search.html,sha256=Pu2hxLGkN_NA-BU8_t4E7Q6uaY6hYTLoD8NZHyrcCaQ,1549
222
227
  unfold/templates/unfold/helpers/search_results.html,sha256=pQx7KoDMapWDusV88qe5hxlxicfP-S9iacji1Hq41Kc,661
223
228
  unfold/templates/unfold/helpers/site_branding.html,sha256=_pUyOvdjlV624eRq0wjpJkgXpn9DCDGc-0U6Mw0FupI,266
@@ -229,12 +234,15 @@ unfold/templates/unfold/helpers/tab_action.html,sha256=cy4JxV-wfXv9tNOTgsWXuj1bc
229
234
  unfold/templates/unfold/helpers/tab_actions.html,sha256=Ir0HFxNAdZWdE6GuxaanSScNYONft0lNB1sZZcKMS5Q,685
230
235
  unfold/templates/unfold/helpers/tab_items.html,sha256=5kZcU7R9tZKKxVLahp2siZpZf7FhrluBH1dIAIaWoAg,3377
231
236
  unfold/templates/unfold/helpers/tab_list.html,sha256=mprad7Fu5ms1qGqjDl9HMmtfUodk43smd3IjagYOyr0,452
232
- unfold/templates/unfold/helpers/theme_switch.html,sha256=0-pi-_gmOIL5DwfWLd0_PNIc0-l28hM8HtAioovtB0k,2269
233
- unfold/templates/unfold/helpers/userlinks.html,sha256=oZqiwCxG_zRecAbzYrr8_hQvkndVB6-liP6LEZM1UZc,863
234
- unfold/templates/unfold/helpers/welcomemsg.html,sha256=Ickay1zuj2A6SE9WmEfFqSKvzmrm_nAH6mJz5_JEQuY,1935
237
+ unfold/templates/unfold/helpers/theme_switch.html,sha256=Y46KKpULH_G-fKQuc5LzfSB7Pubcgj_dBJPRMwZoWxE,2408
238
+ unfold/templates/unfold/helpers/unauthenticated_header.html,sha256=DNfZt_JDnMFwwo_SG0iYEB3I7eQIbwaB4QcpJGs1dtk,535
239
+ unfold/templates/unfold/helpers/unauthenticated_title.html,sha256=2aGnsdZbDV6yno9pb4sqEi15J7M9iLiMz3FY9F0Sgq4,387
240
+ unfold/templates/unfold/helpers/userlinks.html,sha256=bJRDQXQ_0XgxLpfmZoNgU9xpn4X6T6LOAgEmzepFXOI,740
241
+ unfold/templates/unfold/helpers/welcomemsg.html,sha256=Z3dDvozCJ5VhSVA_1go0F4ZD0lQYhCmoWqd_RM00pec,2019
235
242
  unfold/templates/unfold/layouts/base.html,sha256=e9T-vuPvrySHf23LLwRuTQXUg0Q4x-6gmT_yXghqc-I,278
236
243
  unfold/templates/unfold/layouts/base_simple.html,sha256=qUZ9YM24UHgWbmTl61zgN4_ty49P1FZJQ2siNbwnFnQ,1244
237
244
  unfold/templates/unfold/layouts/skeleton.html,sha256=2AWjJx6TxpYbXldwrXRbtyp9XTpAu6O0U_zcJtfYfWs,4684
245
+ unfold/templates/unfold/layouts/unauthenticated.html,sha256=Rh84psp8Ek-i1hVIiYz-HX7lyiQL7FnqA_uAp-D69DI,1022
238
246
  unfold/templates/unfold/templatetags/preserve_changelist_filters.html,sha256=sx2jUhogNY4emBhY8PqxQ6mXifbXQb_IQI9Hd0boJI0,111
239
247
  unfold/templates/unfold/widgets/clearable_file_input.html,sha256=8dXZnc6z2D2K08hqHsQwR5UJffcIRnmYBT02zmCOr9A,2191
240
248
  unfold/templates/unfold/widgets/clearable_file_input_small.html,sha256=zhnaDz72mJgMrq-nCPCMuR5tEJaFVfJyOJUAzR6tQWc,2624
@@ -244,10 +252,11 @@ unfold/templates/unfold/widgets/radio.html,sha256=7Mgc92mMwJdVLjCxoGj5lo76KNaN5d
244
252
  unfold/templates/unfold/widgets/radio_option.html,sha256=wVg6zIB0O44vwBgQCCphPuCXeh-gaDg6ed-0gcf5kg4,324
245
253
  unfold/templates/unfold/widgets/range.html,sha256=Zhfj2VTusS3nZjOYR7slcjk1JtFK0psZbaSCw6TDY1I,294
246
254
  unfold/templates/unfold/widgets/related_widget_wrapper.html,sha256=8poy8kZRGPqmY4gSXkEZt7vevBomrKoe2Lg5zsjpwiU,3919
247
- unfold/templates/unfold/widgets/select.html,sha256=Qx1YUMj2Yq43DaAbDeRcQv-9M8jlIV00NF6970axb7Y,708
255
+ unfold/templates/unfold/widgets/select.html,sha256=MyhlEO4sf7AUjOgH84rL76rhYM0WEn4qRqzuzPmgu5M,715
248
256
  unfold/templates/unfold/widgets/split_datetime.html,sha256=Hfv2PoHxPmV_21DmBFmMcR4WVP9vTV9SrfjVdliRci8,1074
249
257
  unfold/templates/unfold/widgets/split_datetime_vertical.html,sha256=39lZsRyRcKr8DIcy9oL39zC8nAHZTHwW6gyTYOKePrQ,806
250
258
  unfold/templates/unfold/widgets/split_money.html,sha256=AFLUBmzGbY-RXgsfz7gaDxVRhplaIPhXjg_hWYo9xcY,352
259
+ unfold/templates/unfold/widgets/text.html,sha256=jR_nrBN5A-evlX8aHpJplB_CG4aJblaVLMdp8z4-dG8,949
251
260
  unfold/templates/unfold/widgets/textarea.html,sha256=-ZLDGrtASero7L-J3VvTNq_KjPAZh_kLVw0Ow3awqXM,144
252
261
  unfold/templates/unfold/widgets/time.html,sha256=ih9wj8koTaHb9s1NGUmyN9rHvSAmqCMbti9ONDOIujg,122
253
262
  unfold/templates/unfold/widgets/url.html,sha256=IRLgW44VTKN7UrSWeywJwaxQhfG5jhhXuT-KTadKX58,304
@@ -264,7 +273,8 @@ unfold/templates/unfold_crispy/layout/checkbox.html,sha256=V1YGDcYfn4spUHx6M5ux8
264
273
  unfold/templates/unfold_crispy/layout/column.html,sha256=Bob4xRcbJOHScDjSjLMRIMNf4lonNmm8F_JOm2azTik,172
265
274
  unfold/templates/unfold_crispy/layout/div.html,sha256=RE9qQ2w2I2zpi7Z7xzVmVO03UXq0yZvMw-W7rVJkEdw,174
266
275
  unfold/templates/unfold_crispy/layout/field_errors.html,sha256=N0eNJo4OvYzFHPD6vX2gSZWabm46W1GP011sd_dua1I,291
267
- unfold/templates/unfold_crispy/layout/fieldset.html,sha256=batc1TDIHvtzX9ZchvSyH3r3q9s7bgr7DpxEfnwvvjk,601
276
+ unfold/templates/unfold_crispy/layout/fieldset.html,sha256=hbbJVTNUOwFoBtpFMpqGaf-I4cXnQZEG5s91EUxBUzY,654
277
+ unfold/templates/unfold_crispy/layout/fieldset_subheader.html,sha256=fAD3wa9JiuYJwbo8bsmW-LhMw72V2j27EkRgy0G6Kc8,209
268
278
  unfold/templates/unfold_crispy/layout/help_text.html,sha256=FY0UQv5FsoOFhrqvbILEfZE78Hj30r73YHCtg_MWNeY,207
269
279
  unfold/templates/unfold_crispy/layout/help_text_and_errors.html,sha256=Um14wIg0FHthNM0mKE9VdptTrC-lTTcrDUO-UbbXxhY,108
270
280
  unfold/templates/unfold_crispy/layout/hr.html,sha256=_u0V0lIdK3PLREGspx3zywhUQHcFeY7BuMUbaLyN1WU,321
@@ -275,13 +285,13 @@ unfold/templates/unfold_crispy/uni_form.html,sha256=l9UNCUrIycgJ0p_B6qhtO_YxdARy
275
285
  unfold/templates/unfold_crispy/whole_uni_form.html,sha256=ufXRKCIGqkqKFOsh166rpKUnHpFMyBV4eYUCRhs3iws,475
276
286
  unfold/templates/unfold_crispy/whole_uni_formset.html,sha256=CYksfG2hRUdi5n691KW2ih-FfBxpOU4qVBfbOvcu1zs,873
277
287
  unfold/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
- unfold/templatetags/unfold.py,sha256=ht7dnFDANrzly8guUMES-PRR4S5e82I8fuWMD0bDieg,17297
288
+ unfold/templatetags/unfold.py,sha256=Z4VYkTigW2DEURcyq8E7d8EkvCWl_TG_mNDmveE5K6k,18141
279
289
  unfold/templatetags/unfold_list.py,sha256=ayShOYEXcV3o7wKt3t2aFTWvg62Mb-WGlxjYVGgk3a0,14344
280
290
  unfold/typing.py,sha256=i7LM2LiwYTAjT5-OLDUPVn5b9X-DMmHnjlZG2toWwSE,692
281
- unfold/utils.py,sha256=SJikRuAuJN0bE9rfzUujZwycTRrzQm14Hk0zB0EwivU,6164
291
+ unfold/utils.py,sha256=lXKkvhaTxoTtd4p3bB0wHIZD26md6XzBcDkPL5bJGH8,6191
282
292
  unfold/views.py,sha256=FuYnMrlg6SegLUDDN6An__yZj8rchD_iBK8myieYhkA,1492
283
- unfold/widgets.py,sha256=ZpwWbxEwgIqf-rZEaU71UwGwyuGyxE5TofaytXxxFEg,23062
284
- django_unfold-0.58.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
285
- django_unfold-0.58.0.dist-info/METADATA,sha256=bnstJhcMtmg1VBaWRfJO9Mt12BRJp6F_ikTi513G5nI,7951
286
- django_unfold-0.58.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
287
- django_unfold-0.58.0.dist-info/RECORD,,
293
+ unfold/widgets.py,sha256=kBQ94omaglt0csjNbX4VFWL1rjb0vBFZeC2X6HOvHuY,24484
294
+ django_unfold-0.60.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
295
+ django_unfold-0.60.0.dist-info/METADATA,sha256=WUTbBoxXiw3YcvlNnKH5WzMcS0SFxpus6JweY1mUfPQ,8092
296
+ django_unfold-0.60.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
297
+ django_unfold-0.60.0.dist-info/RECORD,,
unfold/admin.py CHANGED
@@ -1,11 +1,18 @@
1
1
  from functools import update_wrapper
2
- from typing import Optional
2
+ from typing import Any, Optional
3
3
 
4
4
  from django import forms
5
5
  from django.contrib.admin import ModelAdmin as BaseModelAdmin
6
6
  from django.contrib.admin import StackedInline as BaseStackedInline
7
7
  from django.contrib.admin import TabularInline as BaseTabularInline
8
8
  from django.contrib.admin import display, helpers
9
+ from django.contrib.admin.options import InlineModelAdmin
10
+ from django.contrib.contenttypes.admin import (
11
+ GenericStackedInline as BaseGenericStackedInline,
12
+ )
13
+ from django.contrib.contenttypes.admin import (
14
+ GenericTabularInline as BaseGenericTabularInline,
15
+ )
9
16
  from django.db.models import BLANK_CHOICE_DASH, Model
10
17
  from django.http import HttpRequest, HttpResponse
11
18
  from django.shortcuts import redirect
@@ -16,8 +23,11 @@ from django.utils.translation import gettext_lazy as _
16
23
  from django.views import View
17
24
 
18
25
  from unfold.checks import UnfoldModelAdminChecks
19
- from unfold.fields import UnfoldAdminField, UnfoldAdminReadonlyField
20
- from unfold.forms import ActionForm
26
+ from unfold.forms import (
27
+ ActionForm,
28
+ PaginationGenericInlineFormSet,
29
+ PaginationInlineFormSet,
30
+ )
21
31
  from unfold.mixins import ActionModelAdminMixin, BaseModelAdminMixin
22
32
  from unfold.overrides import FORMFIELD_OVERRIDES_INLINE
23
33
  from unfold.typing import FieldsetsType
@@ -32,10 +42,6 @@ checkbox = UnfoldBooleanWidget(
32
42
  lambda value: False,
33
43
  )
34
44
 
35
- helpers.AdminField = UnfoldAdminField
36
-
37
- helpers.AdminReadonlyField = UnfoldAdminReadonlyField
38
-
39
45
 
40
46
  class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
41
47
  action_form = ActionForm
@@ -182,16 +188,42 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
182
188
  def get_changelist(self, request, **kwargs):
183
189
  return ChangeList
184
190
 
191
+ def get_formset_kwargs(
192
+ self, request: HttpRequest, obj: Model, inline: InlineModelAdmin, prefix: str
193
+ ) -> dict[str, Any]:
194
+ formset_kwargs = super().get_formset_kwargs(request, obj, inline, prefix)
195
+ formset_kwargs["request"] = request
185
196
 
186
- class TabularInline(BaseModelAdminMixin, BaseTabularInline):
187
- formfield_overrides = FORMFIELD_OVERRIDES_INLINE
188
- readonly_preprocess_fields = {}
189
- ordering_field = None
190
- hide_ordering_field = False
197
+ if hasattr(inline, "per_page"):
198
+ formset_kwargs["per_page"] = inline.per_page
191
199
 
200
+ return formset_kwargs
192
201
 
193
- class StackedInline(BaseModelAdminMixin, BaseStackedInline):
202
+
203
+ class BaseInlineMixin:
194
204
  formfield_overrides = FORMFIELD_OVERRIDES_INLINE
195
205
  readonly_preprocess_fields = {}
196
206
  ordering_field = None
207
+ per_page = None
197
208
  hide_ordering_field = False
209
+ collapsible = False
210
+
211
+
212
+ class TabularInline(BaseInlineMixin, BaseModelAdminMixin, BaseTabularInline):
213
+ formset = PaginationInlineFormSet
214
+
215
+
216
+ class StackedInline(BaseInlineMixin, BaseModelAdminMixin, BaseStackedInline):
217
+ formset = PaginationInlineFormSet
218
+
219
+
220
+ class GenericStackedInline(
221
+ BaseInlineMixin, BaseModelAdminMixin, BaseGenericStackedInline
222
+ ):
223
+ formset = PaginationGenericInlineFormSet
224
+
225
+
226
+ class GenericTabularInline(
227
+ BaseInlineMixin, BaseModelAdminMixin, BaseGenericTabularInline
228
+ ):
229
+ formset = PaginationGenericInlineFormSet
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.__name__} action.",
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>
@@ -12,10 +12,15 @@ from django.http import HttpRequest
12
12
  from django.utils.text import get_text_list
13
13
  from django.utils.translation import gettext_lazy as _
14
14
 
15
- from unfold.admin import StackedInline, TabularInline
16
-
17
- from .checks import NonrelatedModelAdminChecks
18
- from .forms import NonrelatedInlineModelFormSet, nonrelated_inline_formset_factory
15
+ from unfold.admin import (
16
+ StackedInline,
17
+ TabularInline,
18
+ )
19
+ from unfold.contrib.inlines.checks import NonrelatedModelAdminChecks
20
+ from unfold.contrib.inlines.forms import (
21
+ NonrelatedInlineModelFormSet,
22
+ nonrelated_inline_formset_factory,
23
+ )
19
24
 
20
25
 
21
26
  class NonrelatedInlineMixin:
@@ -135,8 +140,8 @@ class NonrelatedInlineMixin:
135
140
 
136
141
 
137
142
  class NonrelatedStackedInline(NonrelatedInlineMixin, StackedInline):
138
- pass
143
+ formset = NonrelatedInlineModelFormSet
139
144
 
140
145
 
141
146
  class NonrelatedTabularInline(NonrelatedInlineMixin, TabularInline):
142
- pass
147
+ formset = NonrelatedInlineModelFormSet
@@ -3,8 +3,10 @@ from typing import Any, Callable, Optional
3
3
  from django.db.models import Model, QuerySet
4
4
  from django.forms import BaseModelFormSet, ModelForm, modelformset_factory
5
5
 
6
+ from unfold.forms import PaginationFormSetMixin
6
7
 
7
- class NonrelatedInlineModelFormSet(BaseModelFormSet):
8
+
9
+ class NonrelatedInlineModelFormSet(PaginationFormSetMixin, BaseModelFormSet):
8
10
  def __init__(
9
11
  self,
10
12
  instance: Optional[Model] = None,
File without changes
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class DefaultAppConfig(AppConfig):
5
+ name = "unfold.contrib.location_field"
6
+ label = "unfold_location_field"
@@ -0,0 +1,5 @@
1
+ <div class="map-widget flex flex-col gap-2">
2
+ {{ field_input }}
3
+
4
+ <div id="map_{{ field_name }}" class="border gap-2 h-72 max-w-2xl rounded-default shadow-xs"></div>
5
+ </div>
unfold/decorators.py CHANGED
@@ -29,13 +29,19 @@ def action(
29
29
  **kwargs,
30
30
  ) -> Optional[HttpResponse]:
31
31
  if permissions:
32
- permission_checks = (
33
- getattr(model_admin, f"has_{permission}_permission")
34
- for permission in permissions
35
- )
36
- # Permissions methods have following syntax: has_<some>_permission(self, request, obj=None):
37
- # But obj is not examined by default in django admin and it would also require additional
38
- # fetch from database, therefore it is not supported yet
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
+
39
45
  has_detail_action = func.__name__ in model_admin._extract_action_names(
40
46
  model_admin.actions_detail
41
47
  )
@@ -46,12 +52,19 @@ def action(
46
52
  )
47
53
  )
48
54
 
49
- if not all(
50
- has_permission(request, kwargs.get("object_id"))
51
- if has_detail_action or has_submit_line_action
52
- else has_permission(request)
53
- for has_permission in permission_checks
54
- ):
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):
55
68
  raise PermissionDenied
56
69
  return func(model_admin, request, *args, **kwargs)
57
70
 
@@ -73,6 +86,7 @@ def action(
73
86
  inner.variant = ActionVariant.DEFAULT
74
87
 
75
88
  inner.attrs = attrs or {}
89
+ inner.original_function_name = func.__name__
76
90
  return inner
77
91
 
78
92
  if function is None: