django-cfg 1.0.3__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.
- django_cfg-1.0.3/.gitignore +41 -0
- django_cfg-1.0.3/@unfold/code/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/admin.py +229 -0
- django_cfg-1.0.3/@unfold/code/apps.py +20 -0
- django_cfg-1.0.3/@unfold/code/checks.py +64 -0
- django_cfg-1.0.3/@unfold/code/components.py +47 -0
- django_cfg-1.0.3/@unfold/code/contrib/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/constance/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/constance/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/constance/settings.py +32 -0
- django_cfg-1.0.3/@unfold/code/contrib/constance/templates/admin/constance/change_list.html +70 -0
- django_cfg-1.0.3/@unfold/code/contrib/constance/templates/admin/constance/includes/results_list.html +71 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/__init__.py +60 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/autocomplete_filters.py +16 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/choice_filters.py +173 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/datetime_filters.py +212 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/dropdown_filters.py +115 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/mixins.py +177 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/numeric_filters.py +196 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/admin/text_filters.py +65 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/forms.py +283 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +21 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +1 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +408 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +35 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +21 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +1 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +9 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +1 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_date_range.html +17 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_datetime_range.html +17 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_field.html +7 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_numeric_range.html +17 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_numeric_single.html +15 -0
- django_cfg-1.0.3/@unfold/code/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +35 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/static/unfold/forms/css/trix/LICENSE +20 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/static/unfold/forms/css/trix/trix.css +412 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/static/unfold/forms/js/trix/LICENSE +20 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/static/unfold/forms/js/trix/trix.js +5 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/static/unfold/forms/js/trix.config.js +39 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/templates/unfold/forms/array.html +33 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/templates/unfold/forms/helpers/toolbar.html +111 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/templates/unfold/forms/wysiwyg.html +7 -0
- django_cfg-1.0.3/@unfold/code/contrib/forms/widgets.py +122 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/admin/guardian/model/change_form.html +13 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/admin/guardian/model/field.html +11 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +37 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +57 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +58 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/unfold/guardian/group_form.html +72 -0
- django_cfg-1.0.3/@unfold/code/contrib/guardian/templates/unfold/guardian/user_form.html +72 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/forms.py +53 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/base.html +8 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_form.html +10 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_list_export.html +5 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_list_export_item.html +7 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_list_import.html +5 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_list_import_export.html +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/change_list_import_item.html +7 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/export.html +82 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import.html +62 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import_confirm.html +19 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import_errors.html +42 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import_form.html +24 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import_preview.html +41 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/import_validation.html +93 -0
- django_cfg-1.0.3/@unfold/code/contrib/import_export/templates/admin/import_export/resource_fields_list.html +26 -0
- django_cfg-1.0.3/@unfold/code/contrib/inlines/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/inlines/admin.py +147 -0
- django_cfg-1.0.3/@unfold/code/contrib/inlines/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/inlines/checks.py +16 -0
- django_cfg-1.0.3/@unfold/code/contrib/inlines/forms.py +44 -0
- django_cfg-1.0.3/@unfold/code/contrib/location_field/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/location_field/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/location_field/templates/location_field/map_widget.html +5 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/apps.py +6 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/templates/simple_history/object_history.html +35 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/templates/simple_history/object_history_form.html +55 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/templates/simple_history/object_history_list.html +118 -0
- django_cfg-1.0.3/@unfold/code/contrib/simple_history/templates/simple_history/submit_line.html +23 -0
- django_cfg-1.0.3/@unfold/code/dataclasses.py +41 -0
- django_cfg-1.0.3/@unfold/code/decorators.py +138 -0
- django_cfg-1.0.3/@unfold/code/enums.py +10 -0
- django_cfg-1.0.3/@unfold/code/exceptions.py +2 -0
- django_cfg-1.0.3/@unfold/code/fields.py +207 -0
- django_cfg-1.0.3/@unfold/code/forms.py +260 -0
- django_cfg-1.0.3/@unfold/code/layout.py +57 -0
- django_cfg-1.0.3/@unfold/code/mixins/__init__.py +4 -0
- django_cfg-1.0.3/@unfold/code/mixins/action_model_admin.py +342 -0
- django_cfg-1.0.3/@unfold/code/mixins/base_model_admin.py +129 -0
- django_cfg-1.0.3/@unfold/code/overrides.py +73 -0
- django_cfg-1.0.3/@unfold/code/paginator.py +21 -0
- django_cfg-1.0.3/@unfold/code/sections.py +82 -0
- django_cfg-1.0.3/@unfold/code/settings.py +106 -0
- django_cfg-1.0.3/@unfold/code/sites.py +628 -0
- django_cfg-1.0.3/@unfold/code/static/admin/js/admin/RelatedObjectLookups.js +301 -0
- django_cfg-1.0.3/@unfold/code/static/admin/js/inlines.js +499 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/css/simplebar/LICENSE +21 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/css/simplebar/simplebar.css +230 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/css/styles.css +2 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/LICENSE +92 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/inter/styles.css +31 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/material-symbols/LICENSE +202 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/fonts/material-symbols/styles.css +6 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/LICENSE +21 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/alpine.anchor.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/alpine.js +5 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/alpine.persist.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/alpine.resize.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/alpine/alpine.sort.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/app.js +520 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/chart/LICENSE +9 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/chart/chart.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/htmx/LICENSE +13 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/htmx/htmx.js +1 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/select2.init.js +52 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/simplebar/LICENSE +21 -0
- django_cfg-1.0.3/@unfold/code/static/unfold/js/simplebar/simplebar.js +10 -0
- django_cfg-1.0.3/@unfold/code/styles.css +673 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/actions.html +60 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/app_index.html +39 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/app_list.html +51 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/auth/user/add_form.html +8 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/auth/user/change_password.html +59 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/base.html +62 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/base_site.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/change_form.html +141 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/change_form_object_tools.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/change_list.html +128 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/change_list_object_tools.html +5 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/change_list_results.html +120 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/date_hierarchy.html +33 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/delete_confirmation.html +103 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/delete_selected_confirmation.html +97 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/edit_inline/stacked.html +112 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/edit_inline/tabular.html +42 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/filter.html +35 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/includes/fieldset.html +33 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/includes/object_delete_summary.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/index.html +21 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/login.html +62 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/nav_sidebar.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/object_history.html +86 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/pagination.html +23 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/search_form.html +30 -0
- django_cfg-1.0.3/@unfold/code/templates/admin/submit_line.html +67 -0
- django_cfg-1.0.3/@unfold/code/templates/auth/widgets/read_only_password_hash.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/registration/logged_out.html +28 -0
- django_cfg-1.0.3/@unfold/code/templates/registration/password_change_done.html +29 -0
- django_cfg-1.0.3/@unfold/code/templates/registration/password_change_form.html +51 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/button.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/card.html +27 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/chart/bar.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/chart/cohort.html +59 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/chart/line.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/container.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/flex.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/icon.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/navigation.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/progress.html +23 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/separator.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/table.html +47 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/text.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/title.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/components/tracker.html +5 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/account_links.html +45 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/actions_row.html +33 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/add_link.html +21 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/app_list.html +102 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/app_list_default.html +62 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/attrs.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/boolean.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/breadcrumb_item.html +8 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/change_list_actions.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/change_list_filter.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/change_list_filter_actions.html +33 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/command.html +53 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/command_history.html +54 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/command_results.html +50 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/delete_submit_line.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/display_dropdown.html +33 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/display_header.html +30 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/display_label.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_delete.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_error.html +8 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_field.html +27 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_heading.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_row.html +27 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/edit_inline/tabular_title.html +49 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/empty_results.html +35 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/field.html +27 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/field_readonly.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/field_readonly_value.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/fieldset_row.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/fieldset_row_checkbox.html +45 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/fieldset_row_field.html +21 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/fieldsets_tabs.html +26 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/form_errors.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/form_label.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/header.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/header_back_button.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/help_text.html +5 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/history.html +41 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/label.html +16 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/language_form.html +10 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/language_switch.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/debug.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/error.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/errornote.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/info.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/success.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages/warning.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/messages.html +19 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/navigation.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/navigation_header.html +28 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination_current_item.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination_default.html +23 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination_ellipsis.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination_infinite.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/pagination_inline.html +36 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/popup_header.html +27 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/search.html +48 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/search_results.html +14 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/shortcut.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/site_branding.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/site_dropdown.html +19 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/site_icon.html +31 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/site_logo.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/submit.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/tab_action.html +59 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/tab_actions.html +19 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/tab_items.html +46 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/tab_list.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/theme_switch.html +34 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/unauthenticated_header.html +15 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/unauthenticated_title.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/userlinks.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/helpers/welcomemsg.html +41 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/layouts/base.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/layouts/base_simple.html +39 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/layouts/skeleton.html +86 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/layouts/unauthenticated.html +37 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/templatetags/preserve_changelist_filters.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/clearable_file_input.html +41 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/clearable_file_input_small.html +46 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/date.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/foreign_key_raw_id.html +21 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/radio.html +20 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/radio_option.html +12 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/range.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/related_widget_wrapper.html +54 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/select.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/split_datetime.html +17 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/split_datetime_vertical.html +29 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/split_money.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/text.html +28 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/textarea.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/time.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold/widgets/url.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/display_form.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/errors.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/errors_formset.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/field.html +25 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/inputs.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/attrs.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/baseinput.html +9 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/button.html +1 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/buttonholder.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/checkbox.html +35 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/column.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/div.html +4 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/field_errors.html +7 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/fieldset.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/fieldset_subheader.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/help_text.html +5 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/help_text_and_errors.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/hr.html +13 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/radio_checkbox_select.html +21 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/row.html +3 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/layout/table_inline_formset.html +104 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/uni_form.html +11 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/whole_uni_form.html +14 -0
- django_cfg-1.0.3/@unfold/code/templates/unfold_crispy/whole_uni_formset.html +30 -0
- django_cfg-1.0.3/@unfold/code/templatetags/__init__.py +0 -0
- django_cfg-1.0.3/@unfold/code/templatetags/unfold.py +605 -0
- django_cfg-1.0.3/@unfold/code/templatetags/unfold_list.py +417 -0
- django_cfg-1.0.3/@unfold/code/typing.py +25 -0
- django_cfg-1.0.3/@unfold/code/utils.py +191 -0
- django_cfg-1.0.3/@unfold/code/views.py +47 -0
- django_cfg-1.0.3/@unfold/code/widgets.py +901 -0
- django_cfg-1.0.3/@unfold/docs/actions/action-form-example.md +109 -0
- django_cfg-1.0.3/@unfold/docs/actions/changeform-submitline.md +43 -0
- django_cfg-1.0.3/@unfold/docs/actions/changeform.md +54 -0
- django_cfg-1.0.3/@unfold/docs/actions/changelist-row.md +44 -0
- django_cfg-1.0.3/@unfold/docs/actions/changelist.md +39 -0
- django_cfg-1.0.3/@unfold/docs/actions/dropdown-actions.md +33 -0
- django_cfg-1.0.3/@unfold/docs/actions/index.md +5 -0
- django_cfg-1.0.3/@unfold/docs/actions/introduction.md +128 -0
- django_cfg-1.0.3/@unfold/docs/components/button.md +61 -0
- django_cfg-1.0.3/@unfold/docs/components/cohort.md +95 -0
- django_cfg-1.0.3/@unfold/docs/components/component-class.md +43 -0
- django_cfg-1.0.3/@unfold/docs/components/index.md +5 -0
- django_cfg-1.0.3/@unfold/docs/components/introduction.md +76 -0
- django_cfg-1.0.3/@unfold/docs/components/table.md +49 -0
- django_cfg-1.0.3/@unfold/docs/components/tracker.md +68 -0
- django_cfg-1.0.3/@unfold/docs/configuration/command.md +59 -0
- django_cfg-1.0.3/@unfold/docs/configuration/conditional-fields.md +68 -0
- django_cfg-1.0.3/@unfold/docs/configuration/crispy-forms.md +214 -0
- django_cfg-1.0.3/@unfold/docs/configuration/custom-pages.md +80 -0
- django_cfg-1.0.3/@unfold/docs/configuration/custom-sites.md +85 -0
- django_cfg-1.0.3/@unfold/docs/configuration/dashboard.md +71 -0
- django_cfg-1.0.3/@unfold/docs/configuration/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/configuration/modeladmin.md +76 -0
- django_cfg-1.0.3/@unfold/docs/configuration/multi-language.md +101 -0
- django_cfg-1.0.3/@unfold/docs/configuration/paginator.md +33 -0
- django_cfg-1.0.3/@unfold/docs/configuration/sections.md +98 -0
- django_cfg-1.0.3/@unfold/docs/configuration/settings.md +183 -0
- django_cfg-1.0.3/@unfold/docs/configuration/site-dropdown.md +36 -0
- django_cfg-1.0.3/@unfold/docs/decorators/action.md +44 -0
- django_cfg-1.0.3/@unfold/docs/decorators/display.md +163 -0
- django_cfg-1.0.3/@unfold/docs/decorators/index.md +5 -0
- django_cfg-1.0.3/@unfold/docs/development/devcontainer.md +45 -0
- django_cfg-1.0.3/@unfold/docs/development/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/development/poetry-dependency.md +50 -0
- django_cfg-1.0.3/@unfold/docs/fields/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/fields/json.md +52 -0
- django_cfg-1.0.3/@unfold/docs/filters/autocomplete.md +39 -0
- django_cfg-1.0.3/@unfold/docs/filters/checkbox-radio.md +112 -0
- django_cfg-1.0.3/@unfold/docs/filters/datetime.md +30 -0
- django_cfg-1.0.3/@unfold/docs/filters/dropdown.md +63 -0
- django_cfg-1.0.3/@unfold/docs/filters/horizontal.md +32 -0
- django_cfg-1.0.3/@unfold/docs/filters/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/filters/introduction.md +22 -0
- django_cfg-1.0.3/@unfold/docs/filters/numeric.md +51 -0
- django_cfg-1.0.3/@unfold/docs/filters/text.md +44 -0
- django_cfg-1.0.3/@unfold/docs/inlines/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/inlines/introduction.md +30 -0
- django_cfg-1.0.3/@unfold/docs/inlines/nonrelated.md +42 -0
- django_cfg-1.0.3/@unfold/docs/inlines/options.md +68 -0
- django_cfg-1.0.3/@unfold/docs/inlines/paginated.md +56 -0
- django_cfg-1.0.3/@unfold/docs/inlines/sortable.md +47 -0
- django_cfg-1.0.3/@unfold/docs/installation/auth.md +40 -0
- django_cfg-1.0.3/@unfold/docs/installation/index.md +5 -0
- django_cfg-1.0.3/@unfold/docs/installation/quickstart.md +64 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-celery-beat.md +77 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-constance.md +49 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-guardian.md +17 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-import-export.md +51 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-location-field.md +11 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-modeltranslation.md +47 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-money.md +19 -0
- django_cfg-1.0.3/@unfold/docs/integrations/django-simple-history.md +46 -0
- django_cfg-1.0.3/@unfold/docs/integrations/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/styles-scripts/customizing-tailwind.md +146 -0
- django_cfg-1.0.3/@unfold/docs/styles-scripts/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/styles-scripts/loading-files.md +26 -0
- django_cfg-1.0.3/@unfold/docs/tabs/changeform.md +51 -0
- django_cfg-1.0.3/@unfold/docs/tabs/changelist.md +46 -0
- django_cfg-1.0.3/@unfold/docs/tabs/dynamic.md +97 -0
- django_cfg-1.0.3/@unfold/docs/tabs/fieldsets.md +58 -0
- django_cfg-1.0.3/@unfold/docs/tabs/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/tabs/inline.md +27 -0
- django_cfg-1.0.3/@unfold/docs/widgets/array.md +54 -0
- django_cfg-1.0.3/@unfold/docs/widgets/index.md +4 -0
- django_cfg-1.0.3/@unfold/docs/widgets/wysiwyg.md +39 -0
- django_cfg-1.0.3/@unfold/new/DJANGO_UNFOLD_DASHBOARD.md +882 -0
- django_cfg-1.0.3/@unfold/new/DJANGO_UNFOLD_MISSING_FEATURES.md +651 -0
- django_cfg-1.0.3/@unfold/new/DJANGO_UNFOLD_TABS.md +502 -0
- django_cfg-1.0.3/LICENSE +21 -0
- django_cfg-1.0.3/MANIFEST.in +6 -0
- django_cfg-1.0.3/PKG-INFO +591 -0
- django_cfg-1.0.3/README.md +519 -0
- django_cfg-1.0.3/django_cfg/__init__.py +87 -0
- django_cfg-1.0.3/django_cfg/apps.py +20 -0
- django_cfg-1.0.3/django_cfg/callbacks.py +196 -0
- django_cfg-1.0.3/django_cfg/health.py +267 -0
- django_cfg-1.0.3/django_cfg/management/__init__.py +1 -0
- django_cfg-1.0.3/django_cfg/management/commands/__init__.py +1 -0
- django_cfg-1.0.3/django_cfg/management/commands/show_config.py +225 -0
- django_cfg-1.0.3/django_cfg/management/commands/validate_config.py +184 -0
- django_cfg-1.0.3/django_cfg/models/__init__.py +61 -0
- django_cfg-1.0.3/django_cfg/models/api.py +145 -0
- django_cfg-1.0.3/django_cfg/models/base.py +287 -0
- django_cfg-1.0.3/django_cfg/models/cache.py +128 -0
- django_cfg-1.0.3/django_cfg/models/constance.py +236 -0
- django_cfg-1.0.3/django_cfg/models/database.py +333 -0
- django_cfg-1.0.3/django_cfg/models/email.py +163 -0
- django_cfg-1.0.3/django_cfg/models/environment.py +276 -0
- django_cfg-1.0.3/django_cfg/models/logging.py +366 -0
- django_cfg-1.0.3/django_cfg/models/security.py +125 -0
- django_cfg-1.0.3/django_cfg/models/unfold/__init__.py +35 -0
- django_cfg-1.0.3/django_cfg/models/unfold/config.py +517 -0
- django_cfg-1.0.3/django_cfg/models/unfold/dashboard.py +107 -0
- django_cfg-1.0.3/django_cfg/models/unfold/dropdown.py +16 -0
- django_cfg-1.0.3/django_cfg/models/unfold/navigation.py +38 -0
- django_cfg-1.0.3/django_cfg/models/unfold/tabs.py +17 -0
- django_cfg-1.0.3/django_cfg/routers.py +48 -0
- django_cfg-1.0.3/django_cfg/templates/__init__.py +1 -0
- django_cfg-1.0.3/django_cfg/templates/admin/index.html +40 -0
- django_cfg-1.0.3/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +266 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/activity_tracker.html +17 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/charts_section.html +39 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/quick_actions.html +110 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/recent_activity.html +45 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/recent_users_table.html +118 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/stats_cards.html +40 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/stats_tiles.html +130 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/system_health.html +72 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/system_metrics.html +54 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/components/user_permissions.html +57 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +174 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/tabs/overview_tab.html +126 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/tabs/stats_tab.html +109 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/tabs/users_tab.html +51 -0
- django_cfg-1.0.3/django_cfg/templates/admin/snippets/zones/zones_table.html +204 -0
- django_cfg-1.0.3/django_cfg/toolkit.py +663 -0
- django_cfg-1.0.3/django_cfg/urls.py +33 -0
- django_cfg-1.0.3/package.json +12 -0
- django_cfg-1.0.3/pyproject.toml +97 -0
- django_cfg-1.0.3/requirements-dev.txt +19 -0
- django_cfg-1.0.3/requirements-minimal.txt +9 -0
- django_cfg-1.0.3/requirements.txt +7 -0
- django_cfg-1.0.3/scripts/README.md +123 -0
- django_cfg-1.0.3/scripts/__init__.py +7 -0
- django_cfg-1.0.3/scripts/dev_cli.py +203 -0
- django_cfg-1.0.3/scripts/generate_requirements.py +165 -0
- django_cfg-1.0.3/scripts/publisher.py +148 -0
- django_cfg-1.0.3/scripts/test_generation.sh +62 -0
- django_cfg-1.0.3/scripts/version_manager.py +242 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
vercel
|
|
3
|
+
*.log
|
|
4
|
+
*.pyc
|
|
5
|
+
__pycache__
|
|
6
|
+
|
|
7
|
+
# Ignore SQLite database files
|
|
8
|
+
db.sqlite3
|
|
9
|
+
|
|
10
|
+
.DS_Store
|
|
11
|
+
cache
|
|
12
|
+
|
|
13
|
+
# Environments
|
|
14
|
+
.env*
|
|
15
|
+
.env.openrouter
|
|
16
|
+
.venv
|
|
17
|
+
env
|
|
18
|
+
.env.openrouter
|
|
19
|
+
venv
|
|
20
|
+
ENV
|
|
21
|
+
env.bak/
|
|
22
|
+
venv.bak/
|
|
23
|
+
|
|
24
|
+
node_modules
|
|
25
|
+
yarn-error.log
|
|
26
|
+
yarn.lock
|
|
27
|
+
package-lock.json
|
|
28
|
+
|
|
29
|
+
.pytest_cache
|
|
30
|
+
|
|
31
|
+
# For pypi package
|
|
32
|
+
__pycache__/
|
|
33
|
+
*.pyc
|
|
34
|
+
*.pyo
|
|
35
|
+
*.pyd
|
|
36
|
+
*.pyw
|
|
37
|
+
*.pyz
|
|
38
|
+
*.pywz
|
|
39
|
+
*.pyzw
|
|
40
|
+
*.egg-info/
|
|
41
|
+
|
|
File without changes
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
from functools import update_wrapper
|
|
2
|
+
from typing import Any, Optional
|
|
3
|
+
|
|
4
|
+
from django import forms
|
|
5
|
+
from django.contrib.admin import ModelAdmin as BaseModelAdmin
|
|
6
|
+
from django.contrib.admin import StackedInline as BaseStackedInline
|
|
7
|
+
from django.contrib.admin import TabularInline as BaseTabularInline
|
|
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
|
+
)
|
|
16
|
+
from django.db.models import BLANK_CHOICE_DASH, Model
|
|
17
|
+
from django.http import HttpRequest, HttpResponse
|
|
18
|
+
from django.shortcuts import redirect
|
|
19
|
+
from django.template.response import TemplateResponse
|
|
20
|
+
from django.urls import URLPattern, path
|
|
21
|
+
from django.utils.safestring import mark_safe
|
|
22
|
+
from django.utils.translation import gettext_lazy as _
|
|
23
|
+
from django.views import View
|
|
24
|
+
|
|
25
|
+
from unfold.checks import UnfoldModelAdminChecks
|
|
26
|
+
from unfold.forms import (
|
|
27
|
+
ActionForm,
|
|
28
|
+
PaginationGenericInlineFormSet,
|
|
29
|
+
PaginationInlineFormSet,
|
|
30
|
+
)
|
|
31
|
+
from unfold.mixins import ActionModelAdminMixin, BaseModelAdminMixin
|
|
32
|
+
from unfold.overrides import FORMFIELD_OVERRIDES_INLINE
|
|
33
|
+
from unfold.typing import FieldsetsType
|
|
34
|
+
from unfold.views import ChangeList
|
|
35
|
+
from unfold.widgets import UnfoldBooleanWidget
|
|
36
|
+
|
|
37
|
+
checkbox = UnfoldBooleanWidget(
|
|
38
|
+
{
|
|
39
|
+
"class": "action-select",
|
|
40
|
+
"aria-label": _("Select record"),
|
|
41
|
+
},
|
|
42
|
+
lambda value: False,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
|
|
47
|
+
action_form = ActionForm
|
|
48
|
+
custom_urls = ()
|
|
49
|
+
add_fieldsets = ()
|
|
50
|
+
list_horizontal_scrollbar_top = False
|
|
51
|
+
list_filter_submit = False
|
|
52
|
+
list_filter_sheet = True
|
|
53
|
+
list_fullwidth = False
|
|
54
|
+
list_disable_select_all = False
|
|
55
|
+
list_before_template = None
|
|
56
|
+
list_after_template = None
|
|
57
|
+
change_form_before_template = None
|
|
58
|
+
change_form_after_template = None
|
|
59
|
+
change_form_outer_before_template = None
|
|
60
|
+
change_form_outer_after_template = None
|
|
61
|
+
compressed_fields = False
|
|
62
|
+
readonly_preprocess_fields = {}
|
|
63
|
+
warn_unsaved_form = False
|
|
64
|
+
checks_class = UnfoldModelAdminChecks
|
|
65
|
+
|
|
66
|
+
def changelist_view(
|
|
67
|
+
self, request: HttpRequest, extra_context: Optional[dict[str, str]] = None
|
|
68
|
+
) -> TemplateResponse:
|
|
69
|
+
additional_media = forms.Media()
|
|
70
|
+
|
|
71
|
+
for filter in self.get_list_filter(request):
|
|
72
|
+
if (
|
|
73
|
+
isinstance(filter, (tuple, list))
|
|
74
|
+
and hasattr(filter[1], "form_class")
|
|
75
|
+
and hasattr(filter[1].form_class, "Media")
|
|
76
|
+
):
|
|
77
|
+
additional_media += forms.Media(filter[1].form_class.Media)
|
|
78
|
+
elif hasattr(filter, "form_class") and hasattr(filter.form_class, "Media"):
|
|
79
|
+
additional_media += forms.Media(filter.form_class.Media)
|
|
80
|
+
|
|
81
|
+
if not extra_context:
|
|
82
|
+
extra_context = {}
|
|
83
|
+
|
|
84
|
+
extra_context.update(
|
|
85
|
+
{
|
|
86
|
+
"media": self.media + additional_media,
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return super().changelist_view(request, extra_context)
|
|
91
|
+
|
|
92
|
+
def get_fieldsets(self, request: HttpRequest, obj=None) -> FieldsetsType:
|
|
93
|
+
if not obj and self.add_fieldsets:
|
|
94
|
+
return self.add_fieldsets
|
|
95
|
+
return super().get_fieldsets(request, obj)
|
|
96
|
+
|
|
97
|
+
def get_custom_urls(self) -> tuple[tuple[str, str, View], ...]:
|
|
98
|
+
"""
|
|
99
|
+
Method to get custom views for ModelAdmin with their urls
|
|
100
|
+
|
|
101
|
+
Format of custom_urls item:
|
|
102
|
+
("path_to_view", "name_of_view", view_itself)
|
|
103
|
+
"""
|
|
104
|
+
return () if self.custom_urls is None else self.custom_urls
|
|
105
|
+
|
|
106
|
+
def get_urls(self) -> list[URLPattern]:
|
|
107
|
+
urls = super().get_urls()
|
|
108
|
+
|
|
109
|
+
def wrap(view):
|
|
110
|
+
def wrapper(*args, **kwargs):
|
|
111
|
+
return self.admin_site.admin_view(view)(*args, **kwargs)
|
|
112
|
+
|
|
113
|
+
wrapper.model_admin = self
|
|
114
|
+
return update_wrapper(wrapper, view)
|
|
115
|
+
|
|
116
|
+
custom_urls = [
|
|
117
|
+
self._path_from_custom_url(custom_url)
|
|
118
|
+
for custom_url in self.get_custom_urls()
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
actions_list_urls = [
|
|
122
|
+
path(
|
|
123
|
+
action.path,
|
|
124
|
+
wrap(action.method),
|
|
125
|
+
name=action.action_name,
|
|
126
|
+
)
|
|
127
|
+
for action in self._get_base_actions_list()
|
|
128
|
+
]
|
|
129
|
+
|
|
130
|
+
action_detail_urls = [
|
|
131
|
+
path(
|
|
132
|
+
f"<path:object_id>/{action.path}",
|
|
133
|
+
wrap(action.method),
|
|
134
|
+
name=action.action_name,
|
|
135
|
+
)
|
|
136
|
+
for action in self._get_base_actions_detail()
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
action_row_urls = [
|
|
140
|
+
path(
|
|
141
|
+
f"<path:object_id>/{action.path}",
|
|
142
|
+
wrap(action.method),
|
|
143
|
+
name=action.action_name,
|
|
144
|
+
)
|
|
145
|
+
for action in self._get_base_actions_row()
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
custom_urls
|
|
150
|
+
+ action_row_urls
|
|
151
|
+
+ actions_list_urls
|
|
152
|
+
+ action_detail_urls
|
|
153
|
+
+ urls
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
def _path_from_custom_url(self, custom_url) -> URLPattern:
|
|
157
|
+
return path(
|
|
158
|
+
custom_url[0],
|
|
159
|
+
self.admin_site.admin_view(custom_url[2]),
|
|
160
|
+
{"model_admin": self},
|
|
161
|
+
name=custom_url[1],
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def get_action_choices(
|
|
165
|
+
self, request: HttpRequest, default_choices=BLANK_CHOICE_DASH
|
|
166
|
+
):
|
|
167
|
+
default_choices = [("", _("Select action"))]
|
|
168
|
+
return super().get_action_choices(request, default_choices)
|
|
169
|
+
|
|
170
|
+
@display(description=mark_safe(checkbox.render("action_toggle_all", 1)))
|
|
171
|
+
def action_checkbox(self, obj: Model):
|
|
172
|
+
return checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk))
|
|
173
|
+
|
|
174
|
+
def response_change(self, request: HttpRequest, obj: Model) -> HttpResponse:
|
|
175
|
+
res = super().response_change(request, obj)
|
|
176
|
+
if "next" in request.GET:
|
|
177
|
+
return redirect(request.GET["next"])
|
|
178
|
+
return res
|
|
179
|
+
|
|
180
|
+
def response_add(
|
|
181
|
+
self, request: HttpRequest, obj: Model, post_url_continue: Optional[str] = None
|
|
182
|
+
) -> HttpResponse:
|
|
183
|
+
res = super().response_add(request, obj, post_url_continue)
|
|
184
|
+
if "next" in request.GET:
|
|
185
|
+
return redirect(request.GET["next"])
|
|
186
|
+
return res
|
|
187
|
+
|
|
188
|
+
def get_changelist(self, request, **kwargs):
|
|
189
|
+
return ChangeList
|
|
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
|
+
|
|
196
|
+
if hasattr(inline, "per_page"):
|
|
197
|
+
formset_kwargs["request"] = request
|
|
198
|
+
formset_kwargs["per_page"] = inline.per_page
|
|
199
|
+
|
|
200
|
+
return formset_kwargs
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class BaseInlineMixin:
|
|
204
|
+
formfield_overrides = FORMFIELD_OVERRIDES_INLINE
|
|
205
|
+
readonly_preprocess_fields = {}
|
|
206
|
+
ordering_field = None
|
|
207
|
+
per_page = None
|
|
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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from django.apps import AppConfig
|
|
2
|
+
from django.contrib import admin
|
|
3
|
+
from django.contrib.admin import sites
|
|
4
|
+
|
|
5
|
+
from .sites import UnfoldAdminSite
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DefaultAppConfig(AppConfig):
|
|
9
|
+
name = "unfold"
|
|
10
|
+
default = True
|
|
11
|
+
|
|
12
|
+
def ready(self):
|
|
13
|
+
site = UnfoldAdminSite()
|
|
14
|
+
|
|
15
|
+
admin.site = site
|
|
16
|
+
sites.site = site
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BasicAppConfig(AppConfig):
|
|
20
|
+
name = "unfold"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from django.contrib.admin.checks import ModelAdminChecks
|
|
4
|
+
from django.contrib.admin.options import BaseModelAdmin
|
|
5
|
+
from django.contrib.auth.models import Permission
|
|
6
|
+
from django.core import checks
|
|
7
|
+
|
|
8
|
+
from unfold.dataclasses import UnfoldAction
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class UnfoldModelAdminChecks(ModelAdminChecks):
|
|
12
|
+
def check(self, admin_obj: BaseModelAdmin, **kwargs) -> list[checks.Error]:
|
|
13
|
+
return [
|
|
14
|
+
*super().check(admin_obj, **kwargs),
|
|
15
|
+
*self._check_unfold_action_permission_methods(admin_obj),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
def _check_unfold_action_permission_methods(self, obj: Any) -> list[checks.Error]:
|
|
19
|
+
"""
|
|
20
|
+
Actions with an allowed_permission attribute require the ModelAdmin to
|
|
21
|
+
implement a has_<perm>_permission() method for each permission.
|
|
22
|
+
"""
|
|
23
|
+
actions: list[UnfoldAction] = [
|
|
24
|
+
*obj._get_base_actions_list(),
|
|
25
|
+
*obj._get_base_actions_detail(),
|
|
26
|
+
*obj._get_base_actions_row(),
|
|
27
|
+
*obj._get_base_actions_submit_line(),
|
|
28
|
+
]
|
|
29
|
+
errors = []
|
|
30
|
+
for action in actions:
|
|
31
|
+
if not hasattr(action.method, "allowed_permissions"):
|
|
32
|
+
continue
|
|
33
|
+
|
|
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
|
|
54
|
+
method_name = f"has_{permission}_permission"
|
|
55
|
+
if not hasattr(obj, method_name):
|
|
56
|
+
errors.append(
|
|
57
|
+
checks.Error(
|
|
58
|
+
f"{obj.__class__.__name__} must define a {method_name}() method for the {action.method.original_function_name}() action.",
|
|
59
|
+
obj=obj.__class__,
|
|
60
|
+
id="admin.E129",
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
return errors
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
from django.http import HttpRequest
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ComponentRegistry:
|
|
7
|
+
_registry: dict[str, type] = {}
|
|
8
|
+
|
|
9
|
+
@classmethod
|
|
10
|
+
def register_class(cls, component_cls: type) -> None:
|
|
11
|
+
if not issubclass(component_cls, BaseComponent):
|
|
12
|
+
raise ValueError(
|
|
13
|
+
f"Class '{component_cls.__name__}' must inherit from BaseComponent."
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
class_name = component_cls.__name__
|
|
17
|
+
|
|
18
|
+
if class_name in cls._registry:
|
|
19
|
+
raise ValueError(f"Class '{class_name}' is already registered.")
|
|
20
|
+
|
|
21
|
+
cls._registry[class_name] = component_cls
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def get_class(cls, class_name: str) -> Optional[type]:
|
|
25
|
+
return cls._registry.get(class_name)
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def create_instance(cls, class_name: str, **kwargs: Any) -> Any:
|
|
29
|
+
component_cls = cls.get_class(class_name)
|
|
30
|
+
|
|
31
|
+
if component_cls is None:
|
|
32
|
+
raise ValueError(f"Class '{class_name}' is not registered.")
|
|
33
|
+
|
|
34
|
+
return component_cls(**kwargs)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def register_component(cls: type) -> type:
|
|
38
|
+
ComponentRegistry.register_class(cls)
|
|
39
|
+
return cls
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class BaseComponent:
|
|
43
|
+
def __init__(self, request: HttpRequest):
|
|
44
|
+
self.request = request
|
|
45
|
+
|
|
46
|
+
def get_context_data(self, **kwargs):
|
|
47
|
+
return kwargs
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
UNFOLD_CONSTANCE_ADDITIONAL_FIELDS = {
|
|
2
|
+
str: [
|
|
3
|
+
"django.forms.CharField",
|
|
4
|
+
{
|
|
5
|
+
"widget": "unfold.widgets.UnfoldAdminTextInputWidget",
|
|
6
|
+
},
|
|
7
|
+
],
|
|
8
|
+
int: [
|
|
9
|
+
"django.forms.IntegerField",
|
|
10
|
+
{
|
|
11
|
+
"widget": "unfold.widgets.UnfoldAdminIntegerFieldWidget",
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
bool: [
|
|
15
|
+
"django.forms.BooleanField",
|
|
16
|
+
{
|
|
17
|
+
"widget": "unfold.widgets.UnfoldBooleanSwitchWidget",
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
"file_field": [
|
|
21
|
+
"django.forms.fields.FileField",
|
|
22
|
+
{
|
|
23
|
+
"widget": "unfold.widgets.UnfoldAdminFileFieldWidget",
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
"image_field": [
|
|
27
|
+
"django.forms.fields.ImageField",
|
|
28
|
+
{
|
|
29
|
+
"widget": "unfold.widgets.UnfoldAdminImageFieldWidget",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{% extends "admin/base_site.html" %}
|
|
2
|
+
|
|
3
|
+
{% load admin_list static i18n %}
|
|
4
|
+
|
|
5
|
+
{% block extrahead %}
|
|
6
|
+
{% url 'admin:jsi18n' as jsi18nurl %}
|
|
7
|
+
<script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
|
|
8
|
+
{{ block.super }}
|
|
9
|
+
{{ media.js }}
|
|
10
|
+
<script type="text/javascript" src="{% static 'admin/js/constance.js' %}"></script>
|
|
11
|
+
{% endblock %}
|
|
12
|
+
|
|
13
|
+
{% block breadcrumbs %}
|
|
14
|
+
<div class="px-4">
|
|
15
|
+
<div class="container mb-6 mx-auto -my-3 lg:mb-12">
|
|
16
|
+
<ul class="flex flex-wrap">
|
|
17
|
+
{% url 'admin:index' as link %}
|
|
18
|
+
{% trans 'Home' as name %}
|
|
19
|
+
{% include 'unfold/helpers/breadcrumb_item.html' with link=link name=name %}
|
|
20
|
+
|
|
21
|
+
{% url 'admin:app_list' app_label=opts.app_label as link %}
|
|
22
|
+
{% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.app_config.verbose_name %}
|
|
23
|
+
|
|
24
|
+
{% include 'unfold/helpers/breadcrumb_item.html' with link='' name=opts.verbose_name_plural|capfirst %}
|
|
25
|
+
</ul>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
{% endblock %}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
{% block content %}
|
|
32
|
+
<div id="content-main" class="constance">
|
|
33
|
+
<div id="changelist" class="flex flex-col gap-8 w-full">
|
|
34
|
+
<form id="changelist-form" action="" method="post" enctype="multipart/form-data" novalidate class="flex flex-col gap-8 w-full">
|
|
35
|
+
{% csrf_token %}
|
|
36
|
+
|
|
37
|
+
{% include "unfold/helpers/form_errors.html" with errors=form.non_field_errors %}
|
|
38
|
+
|
|
39
|
+
{% for field in form.hidden_fields %}
|
|
40
|
+
{{ field }}
|
|
41
|
+
{% endfor %}
|
|
42
|
+
|
|
43
|
+
{% if fieldsets %}
|
|
44
|
+
<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">
|
|
45
|
+
<table class="w-full border-collapse">
|
|
46
|
+
{% for fieldset in fieldsets %}
|
|
47
|
+
{% with config_values=fieldset.config_values %}
|
|
48
|
+
{% include "admin/constance/includes/results_list.html" %}
|
|
49
|
+
{% endwith %}
|
|
50
|
+
{% endfor %}
|
|
51
|
+
|
|
52
|
+
<tfoot>
|
|
53
|
+
<tr>
|
|
54
|
+
<td class="border-t border-base-200 px-3 py-2 dark:border-base-800" colspan="100%">
|
|
55
|
+
<div class="flex justify-end">
|
|
56
|
+
{% trans "Save" as title %}
|
|
57
|
+
{% include "unfold/helpers/submit.html" with title=title %}
|
|
58
|
+
</div>
|
|
59
|
+
</td>
|
|
60
|
+
</tr>
|
|
61
|
+
</tfoot>
|
|
62
|
+
</table>
|
|
63
|
+
</div>
|
|
64
|
+
{% else %}
|
|
65
|
+
{% include "admin/constance/includes/results_list.html" %}
|
|
66
|
+
{% endif %}
|
|
67
|
+
</form>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{% endblock %}
|
django_cfg-1.0.3/@unfold/code/contrib/constance/templates/admin/constance/includes/results_list.html
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{% load admin_list static i18n %}
|
|
2
|
+
|
|
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 }}
|
|
7
|
+
|
|
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>
|
|
15
|
+
|
|
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 %}>
|
|
17
|
+
<th>{% trans "Name" %}</th>
|
|
18
|
+
<th>{% trans "Value" %}</th>
|
|
19
|
+
<th>{% trans "Default" %}</th>
|
|
20
|
+
<th>{% trans "Code" %}</th>
|
|
21
|
+
<th>{% trans "Modified" %}</th>
|
|
22
|
+
<th></th>
|
|
23
|
+
</tr>
|
|
24
|
+
|
|
25
|
+
{% for item in config_values %}
|
|
26
|
+
<tr class="border-t border-base-200 h-[55px] *:px-3 *:py-2 *:align-middle dark:border-base-800" {% if fieldset.collapse %}x-show="rowsOpen"{% endif %}>
|
|
27
|
+
<th class="font-normal text-left">
|
|
28
|
+
{{ item.help_text|linebreaksbr }}
|
|
29
|
+
</th>
|
|
30
|
+
|
|
31
|
+
<td class="{% if item.form_field.errors %}group errors{% endif %}">
|
|
32
|
+
{{ item.form_field }}
|
|
33
|
+
|
|
34
|
+
{% include "unfold/helpers/form_errors.html" with errors=item.form_field.errors %}
|
|
35
|
+
</td>
|
|
36
|
+
|
|
37
|
+
<td>
|
|
38
|
+
{% if item.default %}
|
|
39
|
+
{% include "unfold/helpers/label.html" with text=item.default %}
|
|
40
|
+
{% else %}
|
|
41
|
+
-
|
|
42
|
+
{% endif %}
|
|
43
|
+
</td>
|
|
44
|
+
|
|
45
|
+
<td>
|
|
46
|
+
<a class="item-name item-anchor" href="#{{ item.name|slugify }}" tabindex="-1" id="{{ item.name|slugify }}" title="Link to this setting">
|
|
47
|
+
{% include "unfold/helpers/label.html" with text=item.name type="info" %}
|
|
48
|
+
</a>
|
|
49
|
+
</td>
|
|
50
|
+
|
|
51
|
+
<td>
|
|
52
|
+
{% include "unfold/helpers/boolean.html" with value=item.modified %}
|
|
53
|
+
</td>
|
|
54
|
+
|
|
55
|
+
<td class="w-px">
|
|
56
|
+
{% if not item.is_file %}
|
|
57
|
+
<a href="#"
|
|
58
|
+
tabindex="-1"
|
|
59
|
+
class="flex items-center gap-1 reset-link whitespace-nowrap"
|
|
60
|
+
data-default="{% spaceless %}{% if item.is_checkbox %}{% if item.raw_default %} true {% else %} false {% endif %}{% elif item.is_date %}{{ item.raw_default|date:"U" }}{% elif item.is_datetime %}{{ item.raw_default|date:"U" }}{% else %}{{ item.default }}{% endif %}{% endspaceless %}"
|
|
61
|
+
data-field-type="{% spaceless %}{% if item.is_checkbox %}checkbox{% elif item.is_datetime %}datetime{% elif item.is_date %}date{% endif %}{% endspaceless %}"
|
|
62
|
+
data-field-id="{{ item.form_field.auto_id }}">
|
|
63
|
+
<span class="material-symbols-outlined text-base-400 hover:text-base-700 dark:border-base-700 dark:text-base-500 dark:hover:text-base-200" title="{% trans "Reset to default" %}">
|
|
64
|
+
refresh
|
|
65
|
+
</span>
|
|
66
|
+
</a>
|
|
67
|
+
{% endif %}
|
|
68
|
+
</td>
|
|
69
|
+
</tr>
|
|
70
|
+
{% endfor %}
|
|
71
|
+
</tbody>
|
|
File without changes
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from unfold.contrib.filters.admin.autocomplete_filters import (
|
|
2
|
+
AutocompleteSelectFilter,
|
|
3
|
+
AutocompleteSelectMultipleFilter,
|
|
4
|
+
)
|
|
5
|
+
from unfold.contrib.filters.admin.choice_filters import (
|
|
6
|
+
AllValuesCheckboxFilter,
|
|
7
|
+
BooleanRadioFilter,
|
|
8
|
+
CheckboxFilter,
|
|
9
|
+
ChoicesCheckboxFilter,
|
|
10
|
+
ChoicesRadioFilter,
|
|
11
|
+
RadioFilter,
|
|
12
|
+
RelatedCheckboxFilter,
|
|
13
|
+
)
|
|
14
|
+
from unfold.contrib.filters.admin.datetime_filters import (
|
|
15
|
+
RangeDateFilter,
|
|
16
|
+
RangeDateTimeFilter,
|
|
17
|
+
)
|
|
18
|
+
from unfold.contrib.filters.admin.dropdown_filters import (
|
|
19
|
+
ChoicesDropdownFilter,
|
|
20
|
+
DropdownFilter,
|
|
21
|
+
MultipleChoicesDropdownFilter,
|
|
22
|
+
MultipleDropdownFilter,
|
|
23
|
+
MultipleRelatedDropdownFilter,
|
|
24
|
+
RelatedDropdownFilter,
|
|
25
|
+
)
|
|
26
|
+
from unfold.contrib.filters.admin.numeric_filters import (
|
|
27
|
+
RangeNumericFilter,
|
|
28
|
+
RangeNumericListFilter,
|
|
29
|
+
SingleNumericFilter,
|
|
30
|
+
SliderNumericFilter,
|
|
31
|
+
)
|
|
32
|
+
from unfold.contrib.filters.admin.text_filters import FieldTextFilter, TextFilter
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
"AllValuesCheckboxFilter",
|
|
36
|
+
"BooleanRadioFilter",
|
|
37
|
+
"CheckboxFilter",
|
|
38
|
+
"ChoicesCheckboxFilter",
|
|
39
|
+
"ChoicesRadioFilter",
|
|
40
|
+
"MultipleRelatedCheckboxFilter",
|
|
41
|
+
"RadioFilter",
|
|
42
|
+
"ChoicesDropdownFilter",
|
|
43
|
+
"MultipleChoicesDropdownFilter",
|
|
44
|
+
"DropdownFilter",
|
|
45
|
+
"RelatedDropdownFilter",
|
|
46
|
+
"MultipleDropdownFilter",
|
|
47
|
+
"MultipleRelatedDropdownFilter",
|
|
48
|
+
"RelatedCheckboxFilter",
|
|
49
|
+
"FieldTextFilter",
|
|
50
|
+
"TextFilter",
|
|
51
|
+
"RangeDateFilter",
|
|
52
|
+
"RangeDateFilter",
|
|
53
|
+
"RangeDateTimeFilter",
|
|
54
|
+
"SingleNumericFilter",
|
|
55
|
+
"RangeNumericFilter",
|
|
56
|
+
"RangeNumericListFilter",
|
|
57
|
+
"SliderNumericFilter",
|
|
58
|
+
"AutocompleteSelectFilter",
|
|
59
|
+
"AutocompleteSelectMultipleFilter",
|
|
60
|
+
]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from unfold.contrib.filters.admin.dropdown_filters import (
|
|
2
|
+
MultipleRelatedDropdownFilter,
|
|
3
|
+
RelatedDropdownFilter,
|
|
4
|
+
)
|
|
5
|
+
from unfold.contrib.filters.admin.mixins import AutocompleteMixin
|
|
6
|
+
from unfold.contrib.filters.forms import AutocompleteDropdownForm
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AutocompleteSelectFilter(AutocompleteMixin, RelatedDropdownFilter):
|
|
10
|
+
form_class = AutocompleteDropdownForm
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AutocompleteSelectMultipleFilter(
|
|
14
|
+
AutocompleteMixin, MultipleRelatedDropdownFilter
|
|
15
|
+
):
|
|
16
|
+
form_class = AutocompleteDropdownForm
|