django-unfold 0.64.2__tar.gz → 0.66.0__tar.gz

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 (311) hide show
  1. {django_unfold-0.64.2 → django_unfold-0.66.0}/PKG-INFO +4 -2
  2. {django_unfold-0.64.2 → django_unfold-0.66.0}/pyproject.toml +1 -1
  3. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/admin.py +15 -16
  4. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/constance/settings.py +1 -0
  5. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/constance/templates/admin/constance/change_list.html +18 -18
  6. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/constance/templates/admin/constance/includes/results_list.html +13 -11
  7. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/location_field/templates/location_field/map_widget.html +1 -1
  8. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/dataclasses.py +1 -0
  9. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/mixins/base_model_admin.py +1 -1
  10. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/sites.py +45 -18
  11. django_unfold-0.66.0/src/unfold/static/unfold/css/styles.css +2 -0
  12. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/app.js +56 -11
  13. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/styles.css +24 -10
  14. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/change_form.html +6 -2
  15. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/nav_sidebar.html +1 -1
  16. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/button.html +1 -1
  17. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/card.html +3 -3
  18. django_unfold-0.66.0/src/unfold/templates/unfold/components/layer.html +1 -0
  19. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/progress.html +8 -8
  20. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/tracker.html +1 -1
  21. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/app_list.html +1 -1
  22. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/boolean.html +1 -1
  23. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/command.html +1 -1
  24. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/command_results.html +31 -12
  25. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/header_back_button.html +1 -1
  26. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +1 -1
  27. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/search.html +1 -0
  28. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +1 -1
  29. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
  30. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templatetags/unfold.py +72 -22
  31. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/views.py +2 -0
  32. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/widgets.py +5 -3
  33. django_unfold-0.64.2/src/unfold/static/unfold/css/styles.css +0 -2
  34. {django_unfold-0.64.2 → django_unfold-0.66.0}/LICENSE.md +0 -0
  35. {django_unfold-0.64.2 → django_unfold-0.66.0}/README.md +0 -0
  36. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/__init__.py +0 -0
  37. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/apps.py +0 -0
  38. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/checks.py +0 -0
  39. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/components.py +0 -0
  40. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/__init__.py +0 -0
  41. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/constance/__init__.py +0 -0
  42. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/constance/apps.py +0 -0
  43. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/__init__.py +0 -0
  44. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
  45. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
  46. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/choice_filters.py +0 -0
  47. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
  48. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
  49. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/mixins.py +0 -0
  50. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
  51. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
  52. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/apps.py +0 -0
  53. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/forms.py +0 -0
  54. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +0 -0
  55. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +0 -0
  56. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  57. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  58. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +0 -0
  59. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +0 -0
  60. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +0 -0
  61. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +0 -0
  62. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
  63. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
  64. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  65. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
  66. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
  67. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +0 -0
  68. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/__init__.py +0 -0
  69. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/apps.py +0 -0
  70. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE +0 -0
  71. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/trix.css +0 -0
  72. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/LICENSE +0 -0
  73. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/trix.js +0 -0
  74. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  75. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  76. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  77. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  78. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/forms/widgets.py +0 -0
  79. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/__init__.py +0 -0
  80. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/apps.py +0 -0
  81. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  82. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  83. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
  84. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
  85. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
  86. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
  87. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
  88. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/__init__.py +0 -0
  89. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/apps.py +0 -0
  90. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/forms.py +0 -0
  91. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  92. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  93. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  94. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  95. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import.html +0 -0
  96. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  97. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  98. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
  99. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
  100. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
  101. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
  102. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  103. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
  104. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
  105. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  106. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/inlines/__init__.py +0 -0
  107. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/inlines/admin.py +0 -0
  108. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/inlines/apps.py +0 -0
  109. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/inlines/checks.py +0 -0
  110. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/inlines/forms.py +0 -0
  111. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/location_field/__init__.py +0 -0
  112. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/location_field/apps.py +0 -0
  113. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
  114. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  115. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  116. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
  117. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
  118. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  119. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/decorators.py +0 -0
  120. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/enums.py +0 -0
  121. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/exceptions.py +0 -0
  122. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/fields.py +0 -0
  123. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/forms.py +0 -0
  124. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/layout.py +0 -0
  125. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/mixins/__init__.py +0 -0
  126. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/mixins/action_model_admin.py +0 -0
  127. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/overrides.py +0 -0
  128. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/paginator.py +0 -0
  129. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/sections.py +0 -0
  130. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/settings.py +0 -0
  131. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
  132. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/admin/js/inlines.js +0 -0
  133. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/css/simplebar/LICENSE +0 -0
  134. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/css/simplebar/simplebar.css +0 -0
  135. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  136. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  137. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  138. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  139. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/LICENSE +0 -0
  140. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  141. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/material-symbols/LICENSE +0 -0
  142. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  143. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  144. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/LICENSE +0 -0
  145. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/alpine.anchor.js +0 -0
  146. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/alpine.js +0 -0
  147. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/alpine.persist.js +0 -0
  148. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/alpine.resize.js +0 -0
  149. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/alpine/alpine.sort.js +0 -0
  150. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/chart/LICENSE +0 -0
  151. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/chart/chart.js +0 -0
  152. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/htmx/LICENSE +0 -0
  153. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/htmx/htmx.js +0 -0
  154. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/select2.init.js +0 -0
  155. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/simplebar/LICENSE +0 -0
  156. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/static/unfold/js/simplebar/simplebar.js +0 -0
  157. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/actions.html +0 -0
  158. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/app_index.html +0 -0
  159. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/app_list.html +0 -0
  160. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  161. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
  162. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/base.html +0 -0
  163. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/base_site.html +0 -0
  164. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  165. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/change_list.html +0 -0
  166. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  167. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/change_list_results.html +0 -0
  168. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  169. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
  170. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
  171. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
  172. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
  173. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/filter.html +0 -0
  174. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
  175. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
  176. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/index.html +0 -0
  177. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/login.html +0 -0
  178. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/object_history.html +0 -0
  179. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/pagination.html +0 -0
  180. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/search_form.html +0 -0
  181. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/admin/submit_line.html +0 -0
  182. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  183. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/registration/logged_out.html +0 -0
  184. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/registration/password_change_done.html +0 -0
  185. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/registration/password_change_form.html +0 -0
  186. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  187. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
  188. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  189. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/container.html +0 -0
  190. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  191. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  192. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
  193. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  194. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/table.html +0 -0
  195. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/text.html +0 -0
  196. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/components/title.html +0 -0
  197. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
  198. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
  199. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
  200. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
  201. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  202. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
  203. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
  204. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
  205. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -0
  206. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/command_history.html +0 -0
  207. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
  208. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
  209. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
  210. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  211. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
  212. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
  213. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +0 -0
  214. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
  215. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
  216. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
  217. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
  218. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
  219. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  220. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
  221. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
  222. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
  223. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
  224. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
  225. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  226. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
  227. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  228. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/header_title.html +0 -0
  229. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
  230. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
  231. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
  232. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/language_form.html +0 -0
  233. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
  234. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
  235. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  236. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  237. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  238. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
  239. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
  240. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
  241. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
  242. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/navigation_header.html +0 -0
  243. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination.html +0 -0
  244. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  245. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
  246. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  247. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/pagination_inline.html +0 -0
  248. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/popup_header.html +0 -0
  249. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
  250. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/shortcut.html +0 -0
  251. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
  252. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
  253. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  254. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
  255. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
  256. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
  257. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/tab_items.html +0 -0
  258. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
  259. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
  260. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/unauthenticated_header.html +0 -0
  261. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/unauthenticated_title.html +0 -0
  262. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  263. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
  264. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  265. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
  266. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/layouts/skeleton.html +0 -0
  267. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/layouts/unauthenticated.html +0 -0
  268. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
  269. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
  270. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  271. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
  272. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  273. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
  274. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  275. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
  276. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/select.html +0 -0
  277. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
  278. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
  279. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  280. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/text.html +0 -0
  281. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  282. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  283. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
  284. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/display_form.html +0 -0
  285. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/errors.html +0 -0
  286. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/errors_formset.html +0 -0
  287. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/field.html +0 -0
  288. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/inputs.html +0 -0
  289. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/attrs.html +0 -0
  290. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/baseinput.html +0 -0
  291. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/button.html +0 -0
  292. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/buttonholder.html +0 -0
  293. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/checkbox.html +0 -0
  294. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/column.html +0 -0
  295. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/div.html +0 -0
  296. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/field_errors.html +0 -0
  297. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/fieldset.html +0 -0
  298. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/fieldset_subheader.html +0 -0
  299. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/help_text.html +0 -0
  300. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +0 -0
  301. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/hr.html +0 -0
  302. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +0 -0
  303. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/row.html +0 -0
  304. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +0 -0
  305. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/uni_form.html +0 -0
  306. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/whole_uni_form.html +0 -0
  307. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templates/unfold_crispy/whole_uni_formset.html +0 -0
  308. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templatetags/__init__.py +0 -0
  309. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/templatetags/unfold_list.py +0 -0
  310. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/typing.py +0 -0
  311. {django_unfold-0.64.2 → django_unfold-0.66.0}/src/unfold/utils.py +0 -0
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: django-unfold
3
- Version: 0.64.2
3
+ Version: 0.66.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  License: MIT
6
+ License-File: LICENSE.md
6
7
  Keywords: django,admin,tailwind,theme
7
8
  Requires-Python: >=3.9
8
9
  Classifier: Environment :: Web Environment
@@ -17,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.10
17
18
  Classifier: Programming Language :: Python :: 3.11
18
19
  Classifier: Programming Language :: Python :: 3.12
19
20
  Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
20
22
  Requires-Dist: django (>=4.2)
21
23
  Project-URL: Homepage, https://unfoldadmin.com
22
24
  Project-URL: Repository, https://github.com/unfoldadmin/django-unfold
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.64.2"
3
+ version = "0.66.0"
4
4
  description = "Modern Django admin theme for seamless interface development"
5
5
  license = "MIT"
6
6
  readme = "README.md"
@@ -63,30 +63,29 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
63
63
  warn_unsaved_form = False
64
64
  checks_class = UnfoldModelAdminChecks
65
65
 
66
- def changelist_view(
67
- self, request: HttpRequest, extra_context: Optional[dict[str, str]] = None
68
- ) -> TemplateResponse:
69
- additional_media = forms.Media()
66
+ @property
67
+ def media(self):
68
+ if not hasattr(self, "request"):
69
+ return super().media
70
70
 
71
- for filter in self.get_list_filter(request):
71
+ media = super().media
72
+
73
+ for filter in self.get_list_filter(self.request):
72
74
  if (
73
75
  isinstance(filter, (tuple, list))
74
76
  and hasattr(filter[1], "form_class")
75
77
  and hasattr(filter[1].form_class, "Media")
76
78
  ):
77
- additional_media += forms.Media(filter[1].form_class.Media)
79
+ media += forms.Media(filter[1].form_class.Media)
78
80
  elif hasattr(filter, "form_class") and hasattr(filter.form_class, "Media"):
79
- additional_media += forms.Media(filter.form_class.Media)
81
+ media += forms.Media(filter.form_class.Media)
80
82
 
81
- if not extra_context:
82
- extra_context = {}
83
-
84
- extra_context.update(
85
- {
86
- "media": self.media + additional_media,
87
- }
88
- )
83
+ return media
89
84
 
85
+ def changelist_view(
86
+ self, request: HttpRequest, extra_context: Optional[dict[str, str]] = None
87
+ ) -> TemplateResponse:
88
+ self.request = request
90
89
  return super().changelist_view(request, extra_context)
91
90
 
92
91
  def get_fieldsets(self, request: HttpRequest, obj=None) -> FieldsetsType:
@@ -193,7 +192,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
193
192
  ) -> dict[str, Any]:
194
193
  formset_kwargs = super().get_formset_kwargs(request, obj, inline, prefix)
195
194
 
196
- if hasattr(inline, "per_page"):
195
+ if hasattr(inline, "per_page") and inline.per_page:
197
196
  formset_kwargs["request"] = request
198
197
  formset_kwargs["per_page"] = inline.per_page
199
198
 
@@ -15,6 +15,7 @@ UNFOLD_CONSTANCE_ADDITIONAL_FIELDS = {
15
15
  "django.forms.BooleanField",
16
16
  {
17
17
  "widget": "unfold.widgets.UnfoldBooleanSwitchWidget",
18
+ "required": False,
18
19
  },
19
20
  ],
20
21
  "file_field": [
@@ -22,30 +22,30 @@
22
22
  {{ field }}
23
23
  {% endfor %}
24
24
 
25
- {% if fieldsets %}
26
- <div class="border border-base-200 rounded-default overflow-x-auto simplebar-horizontal-scrollbar-top dark:border-base-800" data-simplebar data-simplebar-auto-hide="false">
27
- <table class="w-full border-collapse">
25
+ <div class="border border-base-200 rounded-default overflow-x-auto simplebar-horizontal-scrollbar-top dark:border-base-800" data-simplebar data-simplebar-auto-hide="false">
26
+ <table class="w-full border-collapse">
27
+ {% if fieldsets %}
28
28
  {% for fieldset in fieldsets %}
29
29
  {% with config_values=fieldset.config_values %}
30
30
  {% include "admin/constance/includes/results_list.html" %}
31
31
  {% endwith %}
32
32
  {% endfor %}
33
+ {% else %}
34
+ {% include "admin/constance/includes/results_list.html" %}
35
+ {% endif %}
33
36
 
34
- <tfoot>
35
- <tr>
36
- <td class="border-t border-base-200 px-3 py-2 dark:border-base-800" colspan="100%">
37
- <div class="flex justify-end">
38
- {% trans "Save" as title %}
39
- {% include "unfold/helpers/submit.html" with title=title %}
40
- </div>
41
- </td>
42
- </tr>
43
- </tfoot>
44
- </table>
45
- </div>
46
- {% else %}
47
- {% include "admin/constance/includes/results_list.html" %}
48
- {% endif %}
37
+ <tfoot>
38
+ <tr>
39
+ <td class="border-t border-base-200 px-3 py-2 dark:border-base-800" colspan="100%">
40
+ <div class="flex justify-end">
41
+ {% trans "Save" as title %}
42
+ {% include "unfold/helpers/submit.html" with title=title %}
43
+ </div>
44
+ </td>
45
+ </tr>
46
+ </tfoot>
47
+ </table>
48
+ </div>
49
49
  </form>
50
50
  </div>
51
51
  </div>
@@ -1,19 +1,21 @@
1
1
  {% load admin_list static i18n %}
2
2
 
3
3
  <tbody {% if fieldset.collapse %} x-data="{ rowsOpen: false }" {% endif %}>
4
- <tr {% if fieldset.collapse %} x-on:click="rowsOpen = !rowsOpen" {% endif %} class="{% if fieldset.collapse %}cursor-pointer{% endif %}">
5
- <th class="bg-base-50 border-t border-base-200 font-semibold px-3 py-2 text-left text-font-important-light dark:text-font-important-dark dark:border-base-800 dark:bg-white/[.04] {% if forloop.first %}border-t-0{% endif %}" colspan="100%">
6
- {{ fieldset.title }}
4
+ {% if fieldset.title %}
5
+ <tr {% if fieldset.collapse %} x-on:click="rowsOpen = !rowsOpen" {% endif %} class="{% if fieldset.collapse %}cursor-pointer{% endif %}">
6
+ <th class="bg-base-50 border-t border-base-200 font-semibold px-3 py-2 text-left text-font-important-light dark:text-font-important-dark dark:border-base-800 dark:bg-white/[.04] {% if forloop.first %}border-t-0{% endif %}" colspan="100%">
7
+ {{ fieldset.title }}
7
8
 
8
- {% if fieldset.collapse %}
9
- <span class="material-symbols-outlined float-right select-none transition-all" title="{% trans "Collapse" %}" x-bind:class="rowsOpen ? 'rotate-180' : ''">
10
- expand_more
11
- </span>
12
- {% endif %}
13
- </th>
14
- </tr>
9
+ {% if fieldset.collapse %}
10
+ <span class="material-symbols-outlined float-right select-none transition-all" title="{% trans "Collapse" %}" x-bind:class="rowsOpen ? 'rotate-180' : ''">
11
+ expand_more
12
+ </span>
13
+ {% endif %}
14
+ </th>
15
+ </tr>
16
+ {% endif %}
15
17
 
16
- <tr class="border-t border-base-200 dark:border-base-800 *:font-semibold *:px-3 *:py-2 *:text-left *:text-font-important-light dark:*:text-font-important-dark" {% if fieldset.collapse %}x-show="rowsOpen"{% endif %}>
18
+ <tr class="{% if fieldset.title %}border-t{% endif %} border-base-200 dark:border-base-800 *:font-semibold *:px-3 *:py-2 *:text-left *:text-font-important-light dark:*:text-font-important-dark" {% if fieldset.collapse %}x-show="rowsOpen"{% endif %}>
17
19
  <th>{% trans "Name" %}</th>
18
20
  <th>{% trans "Value" %}</th>
19
21
  <th>{% trans "Default" %}</th>
@@ -1,5 +1,5 @@
1
1
  <div class="map-widget flex flex-col gap-2">
2
2
  {{ field_input }}
3
3
 
4
- <div id="map_{{ field_name }}" class="border gap-2 h-72 max-w-2xl rounded-default shadow-xs"></div>
4
+ <div id="map_{{ field_name }}" class="border gap-2 h-72 max-w-2xl rounded-default shadow-xs z-10"></div>
5
5
  </div>
@@ -39,3 +39,4 @@ class DropdownItem:
39
39
  title: str
40
40
  link: Union[str, Callable]
41
41
  icon: Optional[str] = None
42
+ attrs: Optional[dict] = None
@@ -18,7 +18,7 @@ from unfold.overrides import FORMFIELD_OVERRIDES
18
18
 
19
19
 
20
20
  class BaseModelAdminMixin:
21
- def __init__(self, model: models.Model, admin_site: AdminSite) -> None:
21
+ def __init__(self, model: type[models.Model], admin_site: AdminSite) -> None:
22
22
  overrides = copy.deepcopy(FORMFIELD_OVERRIDES)
23
23
 
24
24
  for k, v in self.formfield_overrides.items():
@@ -6,6 +6,7 @@ from urllib.parse import parse_qs, urlparse
6
6
 
7
7
  from django.contrib.admin import AdminSite
8
8
  from django.core.cache import cache
9
+ from django.core.paginator import Paginator
9
10
  from django.core.validators import EMPTY_VALUES
10
11
  from django.http import HttpRequest, HttpResponse
11
12
  from django.template.response import TemplateResponse
@@ -209,12 +210,23 @@ class UnfoldAdminSite(AdminSite):
209
210
  return results
210
211
 
211
212
  def _search_models(
212
- self, request: HttpRequest, app_list: list[dict[str, Any]], search_term: str
213
+ self,
214
+ request: HttpRequest,
215
+ app_list: list[dict[str, Any]],
216
+ search_term: str,
217
+ allowed_models: Optional[list[str]] = None,
213
218
  ) -> list[SearchResult]:
214
219
  results = []
215
220
 
216
221
  for app in app_list:
217
222
  for model in app["models"]:
223
+ # Skip models which are not allowed
224
+ if isinstance(allowed_models, (list, tuple)):
225
+ if model["model"]._meta.label.lower() not in [
226
+ m.lower() for m in allowed_models
227
+ ]:
228
+ continue
229
+
218
230
  admin_instance = self._registry.get(model["model"])
219
231
  search_fields = admin_instance.get_search_fields(request)
220
232
 
@@ -255,7 +267,8 @@ class UnfoldAdminSite(AdminSite):
255
267
  ) -> TemplateResponse:
256
268
  start_time = time.time()
257
269
 
258
- CACHE_TIMEOUT = 10
270
+ CACHE_TIMEOUT = 5 * 60
271
+ PER_PAGE = 100
259
272
 
260
273
  search_term = request.GET.get("s")
261
274
  extended_search = "extended" in request.GET
@@ -276,33 +289,50 @@ class UnfoldAdminSite(AdminSite):
276
289
  results = cache_results
277
290
  else:
278
291
  results = self._search_apps(app_list, search_term)
279
- search_models = self._get_config("COMMAND", request).get("search_models")
280
- search_callback = self._get_config("COMMAND", request).get(
281
- "search_callback"
282
- )
283
292
 
284
293
  if extended_search:
285
- if search_callback:
294
+ if search_callback := self._get_config("COMMAND", request).get(
295
+ "search_callback"
296
+ ):
286
297
  results.extend(
287
298
  self._get_value(search_callback, request, search_term)
288
299
  )
289
300
 
290
- if search_models is True:
291
- results.extend(self._search_models(request, app_list, search_term))
301
+ search_models = self._get_value(
302
+ self._get_config("COMMAND", request).get("search_models"), request
303
+ )
304
+
305
+ if search_models is True or isinstance(search_models, (list, tuple)):
306
+ allowed_models = (
307
+ search_models
308
+ if isinstance(search_models, (list, tuple))
309
+ else None
310
+ )
311
+
312
+ results.extend(
313
+ self._search_models(
314
+ request, app_list, search_term, allowed_models
315
+ )
316
+ )
292
317
 
293
318
  cache.set(cache_key, results, timeout=CACHE_TIMEOUT)
294
319
 
295
320
  execution_time = time.time() - start_time
321
+ paginator = Paginator(results, PER_PAGE)
322
+
323
+ show_history = self._get_value(
324
+ self._get_config("COMMAND", request).get("show_history"), request
325
+ )
296
326
 
297
327
  return TemplateResponse(
298
328
  request,
299
329
  template=template_name,
300
330
  context={
301
- "results": results,
331
+ "page_obj": paginator,
332
+ "results": paginator.page(request.GET.get("page", 1)),
333
+ "page_counter": (int(request.GET.get("page", 1)) - 1) * PER_PAGE,
302
334
  "execution_time": execution_time,
303
- "command_show_history": self._get_config("COMMAND", request).get(
304
- "show_history"
305
- ),
335
+ "command_show_history": show_history,
306
336
  },
307
337
  headers={
308
338
  "HX-Trigger": "search",
@@ -356,11 +386,7 @@ class UnfoldAdminSite(AdminSite):
356
386
  )
357
387
 
358
388
  # Checks if any tab item is active and then marks the sidebar link as active
359
- if (
360
- tabs
361
- and self._get_is_tab_active(request, tabs, link)
362
- and "active" not in item
363
- ):
389
+ if tabs and self._get_is_tab_active(request, tabs, link):
364
390
  item["active"] = True
365
391
 
366
392
  # Link callback
@@ -582,6 +608,7 @@ class UnfoldAdminSite(AdminSite):
582
608
  title=item.get("title"),
583
609
  link=self._get_value(item["link"], *args),
584
610
  icon=item.get("icon"),
611
+ attrs=item.get("attrs"),
585
612
  )
586
613
  for item in items
587
614
  ]