django-unfold 0.34.0__tar.gz → 0.35.0__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {django_unfold-0.34.0 → django_unfold-0.35.0}/PKG-INFO +17 -5
- {django_unfold-0.34.0 → django_unfold-0.35.0}/README.md +16 -4
- {django_unfold-0.34.0 → django_unfold-0.35.0}/pyproject.toml +1 -1
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/admin.py +7 -5
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/admin.py +34 -1
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/forms.py +36 -3
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/decorators.py +2 -2
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/app.js +23 -0
- django_unfold-0.35.0/src/unfold/static/unfold/js/select2.init.js +15 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form.html +1 -1
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/submit_line.html +1 -1
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/widgets.py +11 -1
- {django_unfold-0.34.0 → django_unfold-0.35.0}/LICENSE.md +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/checks.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider.min.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/wNumb.min.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/widgets.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/forms.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/admin.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/checks.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/forms.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/apps.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/dataclasses.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/exceptions.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/fields.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/forms.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/settings.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/sites.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/css/simplebar.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/css/styles.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.anchor.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.persist.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/chart.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/htmx.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/simplebar.js +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/styles.css +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/actions.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_index.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base_site.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_results.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/filter.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/index.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/login.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/object_history.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/pagination.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/admin/search_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/registration/logged_out.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_done.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_form.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/change_list_filter.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/button.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/card.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/container.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/flex.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/icon.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/progress.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/separator.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/table.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/text.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/title.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/skeleton.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea_expandable.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templatetags/__init__.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold_list.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/typing.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/utils.py +0 -0
- {django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/views.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: django-unfold
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.35.0
|
4
4
|
Summary: Modern Django admin theme for seamless interface development
|
5
5
|
Home-page: https://unfoldadmin.com
|
6
6
|
License: MIT
|
@@ -179,7 +179,7 @@ class CustomAdminClass(ModelAdmin):
|
|
179
179
|
from django.contrib import admin
|
180
180
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
181
181
|
from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
|
182
|
-
from django.contrib.auth.models import User
|
182
|
+
from django.contrib.auth.models import User, Group
|
183
183
|
|
184
184
|
from unfold.admin import ModelAdmin
|
185
185
|
|
@@ -360,6 +360,9 @@ class CustomAdminClass(ModelAdmin):
|
|
360
360
|
# Display fields in changeform in compressed mode
|
361
361
|
compressed_fields = True # Default: False
|
362
362
|
|
363
|
+
# Warn before leaving unsaved changes in changeform
|
364
|
+
warn_unsaved_form = True # Default: False
|
365
|
+
|
363
366
|
# Preprocess content of readonly fields before render
|
364
367
|
readonly_preprocess_fields = {
|
365
368
|
"model_field_name": "html.unescape",
|
@@ -645,7 +648,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
|
|
645
648
|
from django.contrib import admin
|
646
649
|
from django.contrib.auth.models import User
|
647
650
|
from unfold.admin import ModelAdmin
|
648
|
-
from unfold.contrib.filters.admin import
|
651
|
+
from unfold.contrib.filters.admin import (
|
652
|
+
ChoicesDropdownFilter,
|
653
|
+
MultipleChoicesDropdownFilter,
|
654
|
+
RelatedDropdownFilter,
|
655
|
+
MultipleRelatedDropdownFilter,
|
656
|
+
DropdownFilter,
|
657
|
+
MultipleDropdownFilter
|
658
|
+
)
|
649
659
|
|
650
660
|
|
651
661
|
class CustomDropdownFilter(DropdownFilter):
|
@@ -672,7 +682,9 @@ class MyAdmin(ModelAdmin):
|
|
672
682
|
list_filter = [
|
673
683
|
CustomDropdownFilter,
|
674
684
|
("modelfield_with_choices", ChoicesDropdownFilter),
|
685
|
+
("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
|
675
686
|
("modelfield_with_foreign_key", RelatedDropdownFilter)
|
687
|
+
("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
|
676
688
|
]
|
677
689
|
```
|
678
690
|
|
@@ -1363,8 +1375,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
|
|
1363
1375
|
```
|
1364
1376
|
|
1365
1377
|
```django-html
|
1366
|
-
{% component "unfold/components/card" with title="Card title" %}
|
1367
|
-
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{%
|
1378
|
+
{% component "unfold/components/card.html" with title="Card title" %}
|
1379
|
+
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
|
1368
1380
|
{% endcomponent %}
|
1369
1381
|
```
|
1370
1382
|
|
@@ -155,7 +155,7 @@ class CustomAdminClass(ModelAdmin):
|
|
155
155
|
from django.contrib import admin
|
156
156
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
157
157
|
from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
|
158
|
-
from django.contrib.auth.models import User
|
158
|
+
from django.contrib.auth.models import User, Group
|
159
159
|
|
160
160
|
from unfold.admin import ModelAdmin
|
161
161
|
|
@@ -336,6 +336,9 @@ class CustomAdminClass(ModelAdmin):
|
|
336
336
|
# Display fields in changeform in compressed mode
|
337
337
|
compressed_fields = True # Default: False
|
338
338
|
|
339
|
+
# Warn before leaving unsaved changes in changeform
|
340
|
+
warn_unsaved_form = True # Default: False
|
341
|
+
|
339
342
|
# Preprocess content of readonly fields before render
|
340
343
|
readonly_preprocess_fields = {
|
341
344
|
"model_field_name": "html.unescape",
|
@@ -621,7 +624,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
|
|
621
624
|
from django.contrib import admin
|
622
625
|
from django.contrib.auth.models import User
|
623
626
|
from unfold.admin import ModelAdmin
|
624
|
-
from unfold.contrib.filters.admin import
|
627
|
+
from unfold.contrib.filters.admin import (
|
628
|
+
ChoicesDropdownFilter,
|
629
|
+
MultipleChoicesDropdownFilter,
|
630
|
+
RelatedDropdownFilter,
|
631
|
+
MultipleRelatedDropdownFilter,
|
632
|
+
DropdownFilter,
|
633
|
+
MultipleDropdownFilter
|
634
|
+
)
|
625
635
|
|
626
636
|
|
627
637
|
class CustomDropdownFilter(DropdownFilter):
|
@@ -648,7 +658,9 @@ class MyAdmin(ModelAdmin):
|
|
648
658
|
list_filter = [
|
649
659
|
CustomDropdownFilter,
|
650
660
|
("modelfield_with_choices", ChoicesDropdownFilter),
|
661
|
+
("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
|
651
662
|
("modelfield_with_foreign_key", RelatedDropdownFilter)
|
663
|
+
("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
|
652
664
|
]
|
653
665
|
```
|
654
666
|
|
@@ -1339,8 +1351,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
|
|
1339
1351
|
```
|
1340
1352
|
|
1341
1353
|
```django-html
|
1342
|
-
{% component "unfold/components/card" with title="Card title" %}
|
1343
|
-
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{%
|
1354
|
+
{% component "unfold/components/card.html" with title="Card title" %}
|
1355
|
+
{% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
|
1344
1356
|
{% endcomponent %}
|
1345
1357
|
```
|
1346
1358
|
|
@@ -236,6 +236,7 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
|
|
236
236
|
list_disable_select_all = False
|
237
237
|
compressed_fields = False
|
238
238
|
readonly_preprocess_fields = {}
|
239
|
+
warn_unsaved_form = False
|
239
240
|
checks_class = UnfoldModelAdminChecks
|
240
241
|
|
241
242
|
@property
|
@@ -244,13 +245,14 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
|
|
244
245
|
additional_media = forms.Media()
|
245
246
|
|
246
247
|
for filter in self.list_filter:
|
247
|
-
if
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
filter[1].form_class, "Media"
|
248
|
+
if (
|
249
|
+
isinstance(filter, (tuple, list))
|
250
|
+
and hasattr(filter[1], "form_class")
|
251
|
+
and hasattr(filter[1].form_class, "Media")
|
252
252
|
):
|
253
253
|
additional_media += forms.Media(filter[1].form_class.Media)
|
254
|
+
elif hasattr(filter, "form_class") and hasattr(filter.form_class, "Media"):
|
255
|
+
additional_media += forms.Media(filter.form_class.Media)
|
254
256
|
|
255
257
|
return media + additional_media
|
256
258
|
|
@@ -41,12 +41,23 @@ class ValueMixin:
|
|
41
41
|
)
|
42
42
|
|
43
43
|
|
44
|
+
class MultiValueMixin:
|
45
|
+
def value(self) -> Optional[List[str]]:
|
46
|
+
return (
|
47
|
+
self.lookup_val
|
48
|
+
if self.lookup_val not in EMPTY_VALUES
|
49
|
+
and isinstance(self.lookup_val, List)
|
50
|
+
and len(self.lookup_val) > 0
|
51
|
+
else self.lookup_val
|
52
|
+
)
|
53
|
+
|
54
|
+
|
44
55
|
class DropdownMixin:
|
45
56
|
template = "unfold/filters/filters_field.html"
|
46
57
|
form_class = DropdownForm
|
47
58
|
all_option = ["", _("All")]
|
48
59
|
|
49
|
-
def queryset(self, request, queryset) -> QuerySet:
|
60
|
+
def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
|
50
61
|
if self.value() not in EMPTY_VALUES:
|
51
62
|
return super().queryset(request, queryset)
|
52
63
|
|
@@ -112,11 +123,23 @@ class DropdownFilter(admin.SimpleListFilter):
|
|
112
123
|
name=self.parameter_name,
|
113
124
|
choices=[self.all_option, *self.lookup_choices],
|
114
125
|
data={self.parameter_name: self.value()},
|
126
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
115
127
|
),
|
116
128
|
},
|
117
129
|
)
|
118
130
|
|
119
131
|
|
132
|
+
class MultipleDropdownFilter(DropdownFilter):
|
133
|
+
multiple = True
|
134
|
+
|
135
|
+
def __init__(self, request, params, model, model_admin):
|
136
|
+
self.request = request
|
137
|
+
super().__init__(request, params, model, model_admin)
|
138
|
+
|
139
|
+
def value(self):
|
140
|
+
return self.request.GET.getlist(self.parameter_name)
|
141
|
+
|
142
|
+
|
120
143
|
class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFilter):
|
121
144
|
def choices(self, changelist: ChangeList):
|
122
145
|
choices = [self.all_option, *self.field.flatchoices]
|
@@ -127,10 +150,15 @@ class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFil
|
|
127
150
|
name=self.lookup_kwarg,
|
128
151
|
choices=choices,
|
129
152
|
data={self.lookup_kwarg: self.value()},
|
153
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
130
154
|
),
|
131
155
|
}
|
132
156
|
|
133
157
|
|
158
|
+
class MultipleChoicesDropdownFilter(MultiValueMixin, ChoicesDropdownFilter):
|
159
|
+
multiple = True
|
160
|
+
|
161
|
+
|
134
162
|
class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFilter):
|
135
163
|
def choices(self, changelist: ChangeList):
|
136
164
|
yield {
|
@@ -139,10 +167,15 @@ class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFil
|
|
139
167
|
name=self.lookup_kwarg,
|
140
168
|
choices=[self.all_option, *self.lookup_choices],
|
141
169
|
data={self.lookup_kwarg: self.value()},
|
170
|
+
multiple=self.multiple if hasattr(self, "multiple") else False,
|
142
171
|
),
|
143
172
|
}
|
144
173
|
|
145
174
|
|
175
|
+
class MultipleRelatedDropdownFilter(MultiValueMixin, RelatedDropdownFilter):
|
176
|
+
multiple = True
|
177
|
+
|
178
|
+
|
146
179
|
class SingleNumericFilter(admin.FieldListFilter):
|
147
180
|
request = None
|
148
181
|
parameter_name = None
|
@@ -1,8 +1,10 @@
|
|
1
1
|
from django import forms
|
2
|
+
from django.forms import ChoiceField, MultipleChoiceField
|
2
3
|
from django.utils.translation import gettext_lazy as _
|
3
4
|
|
4
5
|
from ...widgets import (
|
5
6
|
INPUT_CLASSES,
|
7
|
+
UnfoldAdminSelectMultipleWidget,
|
6
8
|
UnfoldAdminSelectWidget,
|
7
9
|
UnfoldAdminSplitDateTimeVerticalWidget,
|
8
10
|
UnfoldAdminTextInputWidget,
|
@@ -21,15 +23,46 @@ class SearchForm(forms.Form):
|
|
21
23
|
|
22
24
|
|
23
25
|
class DropdownForm(forms.Form):
|
24
|
-
|
26
|
+
widget = UnfoldAdminSelectWidget(
|
27
|
+
attrs={
|
28
|
+
"data-theme": "admin-autocomplete",
|
29
|
+
"class": "admin-autocomplete",
|
30
|
+
}
|
31
|
+
)
|
32
|
+
field = ChoiceField
|
33
|
+
|
34
|
+
def __init__(self, name, label, choices, multiple=False, *args, **kwargs):
|
25
35
|
super().__init__(*args, **kwargs)
|
26
36
|
|
27
|
-
|
37
|
+
if multiple:
|
38
|
+
self.widget = UnfoldAdminSelectMultipleWidget(
|
39
|
+
attrs={
|
40
|
+
"data-theme": "admin-autocomplete",
|
41
|
+
"class": "admin-autocomplete",
|
42
|
+
}
|
43
|
+
)
|
44
|
+
self.field = MultipleChoiceField
|
45
|
+
|
46
|
+
self.fields[name] = self.field(
|
28
47
|
label=label,
|
29
48
|
required=False,
|
30
49
|
choices=choices,
|
31
|
-
widget=
|
50
|
+
widget=self.widget,
|
51
|
+
)
|
52
|
+
|
53
|
+
class Media:
|
54
|
+
js = (
|
55
|
+
"admin/js/vendor/jquery/jquery.js",
|
56
|
+
"admin/js/vendor/select2/select2.full.js",
|
57
|
+
"admin/js/jquery.init.js",
|
58
|
+
"unfold/js/select2.init.js",
|
32
59
|
)
|
60
|
+
css = {
|
61
|
+
"screen": (
|
62
|
+
"admin/css/vendor/select2/select2.css",
|
63
|
+
"admin/css/autocomplete.css",
|
64
|
+
),
|
65
|
+
}
|
33
66
|
|
34
67
|
|
35
68
|
class SingleNumericForm(forms.Form):
|
@@ -29,12 +29,12 @@ def action(
|
|
29
29
|
getattr(model_admin, f"has_{permission}_permission")
|
30
30
|
for permission in permissions
|
31
31
|
)
|
32
|
-
# TODO add obj parameter into has_permission method call.
|
33
32
|
# Permissions methods have following syntax: has_<some>_permission(self, request, obj=None):
|
34
33
|
# But obj is not examined by default in django admin and it would also require additional
|
35
34
|
# fetch from database, therefore it is not supported yet
|
36
35
|
if not any(
|
37
|
-
has_permission(request)
|
36
|
+
has_permission(request, kwargs.get("object_id"))
|
37
|
+
for has_permission in permission_checks
|
38
38
|
):
|
39
39
|
raise PermissionDenied
|
40
40
|
return func(model_admin, request, *args, **kwargs)
|
@@ -8,8 +8,31 @@ window.addEventListener("load", (e) => {
|
|
8
8
|
renderCharts();
|
9
9
|
|
10
10
|
filterForm();
|
11
|
+
|
12
|
+
warnWithoutSaving();
|
11
13
|
});
|
12
14
|
|
15
|
+
/*************************************************************
|
16
|
+
* Warn without saving
|
17
|
+
*************************************************************/
|
18
|
+
const warnWithoutSaving = () => {
|
19
|
+
let formChanged = false;
|
20
|
+
|
21
|
+
Array.from(
|
22
|
+
document.querySelectorAll(
|
23
|
+
"form.warn-unsaved-form input, form.warn-unsaved-form select"
|
24
|
+
)
|
25
|
+
).forEach((field) => {
|
26
|
+
field.addEventListener("change", (e) => (formChanged = true));
|
27
|
+
});
|
28
|
+
|
29
|
+
window.addEventListener("beforeunload", (e) => {
|
30
|
+
if (formChanged) {
|
31
|
+
e.preventDefault();
|
32
|
+
}
|
33
|
+
});
|
34
|
+
};
|
35
|
+
|
13
36
|
/*************************************************************
|
14
37
|
* Filter form
|
15
38
|
*************************************************************/
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
{
|
3
|
+
const $ = django.jQuery;
|
4
|
+
|
5
|
+
$.fn.djangoCustomSelect2 = function () {
|
6
|
+
$.each(this, function (i, element) {
|
7
|
+
$(element).select2();
|
8
|
+
});
|
9
|
+
return this;
|
10
|
+
};
|
11
|
+
|
12
|
+
$(function () {
|
13
|
+
$(".admin-autocomplete").djangoCustomSelect2();
|
14
|
+
});
|
15
|
+
}
|
@@ -59,7 +59,7 @@
|
|
59
59
|
|
60
60
|
{% block content %}
|
61
61
|
<div id="content-main">
|
62
|
-
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}{% if form_url %}action="{{ form_url }}" {% endif %}method="post" id="{{ opts.model_name }}_form" novalidate>
|
62
|
+
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}{% if form_url %}action="{{ form_url }}" {% endif %}method="post" id="{{ opts.model_name }}_form" {% if adminform.model_admin.warn_unsaved_form %}class="warn-unsaved-form"{% endif %} novalidate>
|
63
63
|
{% csrf_token %}
|
64
64
|
|
65
65
|
{% block form_top %}{% endblock %}
|
@@ -42,7 +42,7 @@
|
|
42
42
|
{% endif %}
|
43
43
|
|
44
44
|
{% if show_save_as_new %}
|
45
|
-
<button type="submit" name="_saveasnew" class="border font-medium px-3 py-2 rounded-md transition-all w-full hover:bg-gray-50 dark:border-gray-700 dark:hover:text-gray-200 dark:hover:bg-gray-900">
|
45
|
+
<button type="submit" name="_saveasnew" class="border font-medium hidden px-3 py-2 rounded-md transition-all w-full hover:bg-gray-50 lg:block lg:w-auto dark:border-gray-700 dark:hover:text-gray-200 dark:hover:bg-gray-900">
|
46
46
|
{% translate 'Save as new' %}
|
47
47
|
</button>
|
48
48
|
{% endif %}
|
@@ -25,6 +25,7 @@ from django.forms import (
|
|
25
25
|
NumberInput,
|
26
26
|
PasswordInput,
|
27
27
|
Select,
|
28
|
+
SelectMultiple,
|
28
29
|
)
|
29
30
|
from django.utils.translation import gettext_lazy as _
|
30
31
|
|
@@ -480,7 +481,16 @@ class UnfoldAdminSelectWidget(Select):
|
|
480
481
|
if attrs is None:
|
481
482
|
attrs = {}
|
482
483
|
|
483
|
-
attrs["class"] = " ".join(SELECT_CLASSES)
|
484
|
+
attrs["class"] = " ".join([*SELECT_CLASSES, attrs.get("class", "")])
|
485
|
+
super().__init__(attrs, choices)
|
486
|
+
|
487
|
+
|
488
|
+
class UnfoldAdminSelectMultipleWidget(SelectMultiple):
|
489
|
+
def __init__(self, attrs=None, choices=()):
|
490
|
+
if attrs is None:
|
491
|
+
attrs = {}
|
492
|
+
|
493
|
+
attrs["class"] = " ".join([*SELECT_CLASSES, attrs.get("class", "")])
|
484
494
|
super().__init__(attrs, choices)
|
485
495
|
|
486
496
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{django_unfold-0.34.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/styles.css
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|