django's default admin interface made customizable. popup windows replaced by modals. :mage: :zap:

Overview

django-admin-interface

django-admin-interface is a modern responsive flat admin interface customizable by the admin itself.

django-admin-interface-preview

Features

  • Beautiful default django-theme
  • Themes management and customization (you can customize admin title, logo and colors)
  • Responsive
  • List filter dropdown (optional)
  • NEW Related modal (instead of the old popup window, optional)
  • NEW Environment name/marker
  • NEW Language chooser
  • Compatibility / Style optimizations for:
    • django-ckeditor
    • django-dynamic-raw-id
    • django-json-widget
    • django-modeltranslation
    • django-tabbed-admin
    • sorl-thumbnail

Installation

  • Run pip install django-admin-interface
  • Add admin_interface, flat_responsive, flat and colorfield to settings.INSTALLED_APPS before django.contrib.admin
INSTALLED_APPS = (
    #...
    'admin_interface',
    'flat_responsive', # only if django version < 2.0
    'flat', # only if django version < 1.9
    'colorfield',
    #...
    'django.contrib.admin',
    #...
)

X_FRAME_OPTIONS='SAMEORIGIN' # only if django version >= 3.0
  • Run python manage.py migrate
  • Run python manage.py collectstatic
  • Restart your application server

Upgrade

  • Run pip install django-admin-interface --upgrade
  • Run python manage.py migrate (add --fake-initial if you are upgrading from 0.1.0 version)
  • Run python manage.py collectstatic --clear
  • Restart your application server

Optional themes

This package ships with optional themes as fixtures, they can be installed using the loaddata admin command. Optional themes are activated on installation.

Django theme (default):

Run python manage.py loaddata admin_interface_theme_django.json

Bootstrap theme:

Run python manage.py loaddata admin_interface_theme_bootstrap.json

Foundation theme:

Run python manage.py loaddata admin_interface_theme_foundation.json

U.S. Web Design Standards theme:

Run python manage.py loaddata admin_interface_theme_uswds.json

Add more themes

You can add a theme you've created through the admin to this repository by sending us a PR. Here are the steps to follow to add:

  1. Export your exact theme as fixture using the dumpdata admin command: python manage.py dumpdata admin_interface.Theme --indent 4 -o admin_interface_theme_{{name}}.json --pks=N

  2. Copy the generated json file into the fixtures folder (making sure its name starts with admin_interface_theme_ to avoid clashes with fixtures that might be provided by other third party apps).

  3. Remove the "pk" from the fixture and make sure the active field is set to true (in this way a theme is automatically activated when installed).

  4. Edit the section above to document your theme.

Add theme support to third-party libraries

You can add theme support to existing third-party libraries using the following css variables:

  • --admin-interface-title-color
  • --admin-interface-logo-color
  • --admin-interface-env-color
  • --admin-interface-header-background-color:
  • --admin-interface-header-text-color
  • --admin-interface-header-link-color
  • --admin-interface-header-link_hover-color
  • --admin-interface-module-background-color
  • --admin-interface-module-text-color
  • --admin-interface-module-link-color
  • --admin-interface-module-link-hover-color
  • --admin-interface-generic-link-color
  • --admin-interface-generic-link-hover-color
  • --admin-interface-save-button-background-color
  • --admin-interface-save-button-background-hover-color
  • --admin-interface-save-button-text-color
  • --admin-interface-delete-button-background-color
  • --admin-interface-delete-button-background-hover-color
  • --admin-interface-delete-button-text-color
  • --admin-interface-related-modal-background-color
  • --admin-interface-related-modal-background-opacity

Screenshots

Admin login

django-admin-interface_login

Admin dashboard

django-admin-interface_dashboard

Admin themes management

django-admin-interface_themes_management

Admin theme customization

django-admin-interface_theme_customization

FAQ

  • I already have a custom base_site.html, how can I make it work?

You can use django-apptemplates, then add {% extends "admin_interface:admin/base_site.html" %} to your base_site.html

Testing

# create python virtual environment
virtualenv testing_django_admin_interface

# activate virtualenv
cd testing_django_admin_interface && . bin/activate

# clone repo
git clone https://github.com/fabiocaccamo/django-admin-interface.git src && cd src

# install dependencies
pip install -r requirements.txt

# run tests
tox
# or
python setup.py test
# or
python -m django test --settings "tests.settings"

License

Released under MIT License.


See also

  • django-colorfield - simple color field for models with a nice color-picker in the admin. ๐ŸŽจ

  • django-extra-settings - config and manage typed extra settings using just the django admin. โš™๏ธ

  • django-maintenance-mode - shows a 503 error page when maintenance-mode is on. ๐Ÿšง ๐Ÿ› ๏ธ

  • django-redirects - redirects with full control. โ†ช๏ธ

  • django-treenode - probably the best abstract model / admin for your tree based stuff. ๐ŸŒณ

  • python-benedict - dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. ๐Ÿ“˜

  • python-codicefiscale - encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ’ณ

  • python-fsutil - file-system utilities for lazy devs. ๐ŸงŸโ€โ™‚๏ธ

Comments
  • post_migrate_handler

    post_migrate_handler

    Python version 3.8

    Django version 3.2.16

    Package version 0.22.2

    Current behavior (bug description) The current behavior of the post-migration signal (post_migrate_handler) does not take into account any routing of the databases

    from django.conf import settings
    
    
    class DatabaseAppsRouter(object):
        """
    
            arouter to control all database operations on models for different
            databases.
    
            in case an app is not set in settings.DATABASE_APPS_MAPPING, the router
            will fallback to the `default` database.
    
            Settings example:
    
            DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
        """
    
        def db_for_read(self, model, **hints):
            """Point all read operations to the specific database"""
            if model._meta.app_label in settings.DATABASE_APPS_MAPPING:
                return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
    
            return None
    
        def db_for_write(self, model, **hints):
            """Point all write operations to the specific database"""
            if model._meta.app_label in settings.DATABASE_APPS_MAPPING:
                return settings.DATABASE_APPS_MAPPING[model._meta.app_label]
    
            return None
    
        def allow_relation(self, obj1, obj2, **hints):
            """Allow any relation between apps that use the same database"""
            db1 = settings.DATABASE_APPS_MAPPING[obj1._meta.app_label]
            db2 = settings.DATABASE_APPS_MAPPING[obj2._meta.app_label]
    
            if db1 and db2:
                return db1 == db2
    
            return None
    
        def allow_migrate(self, db, app_label, model_name=None, **hints):
            """Make sure that apps only appear in the related database"""
    
            if db in settings.DATABASE_APPS_MAPPING.values():
                return settings.DATABASE_APPS_MAPPING[app_label] == db
    
            elif app_label in settings.DATABASE_APPS_MAPPING:
                return False
    
            return None
    
    
    DATABASES = {
        'default': {
            'ENGINE': 'timescale.db.backends.postgresql',
            'NAME': TIMESCALE_DB_HOST_FORMATTED['Database'],
            'USER': TIMESCALE_DB_HOST_FORMATTED['Username'],
            'PASSWORD': TIMESCALE_DB_HOST_FORMATTED['Password'],
            'HOST': TIMESCALE_DB_HOST_FORMATTED['Host'],
            'PORT': TIMESCALE_DB_PORT,
            'OPTIONS': {
                'client_encoding': 'UTF8',
                # 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE,
            }
        },
        'collector': {
            'ENGINE': 'djongo',
            'NAME': 'Database',
            'ENFORCE_SCHEMA': True,
            'CLIENT': {
                'host': MONGO_DB_HOST
            }
        }
    }
    
    
    DATABASE_APPS_MAPPING = {
        'contenttypes': 'default',
        'auth': 'default',
        'admin': 'default',
        'django_cache': 'default',
        'sessions': 'default',
        'staticfiles': 'default',
        'admin_interface': 'default',
        'collector': 'djongo(mongodb)',
        'main': 'default',
    }
    
    DATABASE_ROUTERS = ['routers.DatabaseAppsRouter']
    

    Workaround

    def apply_theme(sender, **kwargs):
        from django.conf import settings
        from admin_interface.models import Theme
        from admin_interface.cache import del_cached_active_theme
    
        del_cached_active_theme()
        theme = Theme.get_active_theme('default')
        theme.logo = ....
        theme.favicon = ....
        theme.save()
    
    
    class MainConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'main'
        verbose_name = 'analyser configuration'
    
        def ready(self) -> None:
            from admin_interface.models import Theme
    
            Theme.post_migrate_handler = apply_theme
            if 'admin_interface_theme' in connection.introspection.table_names():
                apply_theme(None)
    
    bug 
    opened by zN3utr4l 35
  • Tabbed changeform

    Tabbed changeform

    Related to #209

    These are purely visual changes based on a boolean field.

    Significant changes are,

    • Two new fields show_fieldsets_as_tabs & show_inlines_as_tabs and it's migration.
    • headless_* version of fieldsets and inlines templates in order to hide the header. They are exact copies except for the title line.
    • Template tag to fetch headerless_* version of fieldset and inlines when in tabbed mode
    • JS file with basic tab logic
    • Static CSS for tab buttons
    enhancement 
    opened by VaZark 26
  • Popup for related models creation fires a javascript error when

    Popup for related models creation fires a javascript error when "Related modal" is inactive

    Python version Python 3.7.6

    Django version Django 3.0.4

    Package version django-admin-interface==0.12

    Current behavior (bug description) The Popup for related models creation doesn't work when "Related modal" is inactive, due to this javascript error:

     Uncaught TypeError: Cannot read property 'replace' of undefined
        at windowname_to_id (:8000/static/admin/js/admin/RelatedObjectLookups.js:19)
        at dismissAddRelatedObjectPopup (:8000/static/admin/js/admin/RelatedObjectLookups.js:77)
        at popup_response.js:43
        at popup_response.js:52
    

    Expected behavior Since the standard Django admin is working correctly, this problem seems related to the presence of django-admin-interface.

    I did a very basic setup of a simple Django project to reproduce the error in a simplified enrvironment.

    The project and some screenshots to better explain the problem are available here:

    https://github.com/morlandi/test-admin-interface

    bug 
    opened by morlandi 20
  • Refresh translations + add CI check

    Refresh translations + add CI check

    I recreated translations last week and noticed many changes.

    Files should be regenerated so that translators can update translations. I will contribute French!

    bug 
    opened by merwok 17
  • Replace travis with github actions

    Replace travis with github actions

    Most projects have left Travis because of the management issues. It seems that tests for PRs here are not run any more. I could convert the config to github actions (example conversions from circleci: https://github.com/caravancoop/configstore/pull/47)

    enhancement 
    opened by merwok 17
  • Unreadable text in autocomplete multi-selects

    Unreadable text in autocomplete multi-selects

    Python version 3.8

    Django version 3.0.6

    Package version 0.12.2

    Current behavior (bug description) In a multi-select field using autocomplete (django admin feature), selected options are not readable. Djangoโ€™s autocomplete.css sets a white font color, django-admin-interface inline CSS defines white background color.

    Expected behavior Text should be readable :slightly_smiling_face: I am not sure if the background or text color should change, though; should probably match the behaviour of custom selects.

    A quick workaround:

    .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
      color: inherit;
    
    bug 
    opened by merwok 17
  • Cache admin settings

    Cache admin settings

    Each call to Theme.get_active_theme makes multiple database calls. Unfortunately, that's called in the get_admin_interface_theme template tag, which appears multiple times on each admin page render.

    We should cache these calls at least per request to speed up performance.

    enhancement 
    opened by cmc333333 17
  • Left/right scrolling broken with django-import-export

    Left/right scrolling broken with django-import-export

    I'm not sure which repo to open this issue on, but when using django-import-export, after importing it takes you to a big table that shows the before & after. With this theme enabled, there is no ability to scroll left and right to see those changes.

    Issue on the other side, just in case: https://github.com/django-import-export/django-import-export/issues/1476

    enhancement 
    opened by yatahaze 16
  • migrate fails at

    migrate fails at "change_related_modal_background_opacity_type"

    Hi there. Thanks for the great interface. I'm trying to migrate from a function setup with Python 3.6, Django 2.1.5, and admin-interface 0.9.1 . When I run migrate on my development computer I end up with the following traceback. I'm happy to help debug but the process of debugging if I can.

    ` Applying admin_interface.0008_change_related_modal_background_opacity_type...Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) psycopg2.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/migration.py", line 124, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 216, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 523, in alter_field old_db_params, new_db_params, strict) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/schema.py", line 122, in _alter_field new_db_params, strict, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 663, in _alter_field params, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 133, in execute cursor.execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute return super().execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers return executor(sql, params, many, context) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/utils.py", line 89, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) django.db.utils.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/psycopg2/init.py", line 130, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: FATAL: the database system is in recovery mode

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "manage.py", line 30, in execute_from_command_line(sys.argv) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv self.execute(*args, **cmd_options) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute output = self.handle(*args, **options) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped res = handle_func(*args, **kwargs) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 203, in handle fake_initial=fake_initial, File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 117, in migrate state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration state = migration.apply(state, schema_editor) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 108, in exit self.atomic.exit(exc_type, exc_value, traceback) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/transaction.py", line 256, in exit connection.set_autocommit(True) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 394, in set_autocommit self.ensure_connection() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/utils.py", line 89, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/home/ace/.local/share/virtualenvs/website-10j77PrM/lib/python3.6/site-packages/psycopg2/init.py", line 130, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: FATAL: the database system is in recovery `mode``

    opened by acegallagher 16
  • CSS as FileField in `Theme` model

    CSS as FileField in `Theme` model

    Hello,

    I have seen that the Theme model allow to "inject" raw css through its css attribute. However it is a TextField and it is not so easy to use in practice (for instance we need to inline the css code in the json fixture). I think it could be great to either turn this field into a FileField or to add a new FileField attribute like css_file. Of course I can help through a PR :)

    enhancement wontfix 
    opened by asiffer 15
  • Show active filters at the top of the sidebar with clear button

    Show active filters at the top of the sidebar with clear button

    On a list page with many filters shown and the dropdown option active, admin users have a hard time finding out which filters are currently active, in order to remove one for example if the current selection has no results. They would have to go through the list and determine if the value visible is the default or not, so they end up clearing all filters (itโ€™s the only action displayed) and re-building their selection.

    #174 improves the visibility and #175 fixes a usability issue. This proposes a new theme option to also display current filters at the top of the sidebar, wich a link to remove each filter: ( x Age: 9+ ) ( x Group: 10-15 ) ( x Clear all filters ) (parens to represent a chip widget)

    enhancement 
    opened by merwok 14
  • Used slugify  template tag for tabs  not working with   non-ASCII alphanumeric characters

    Used slugify template tag for tabs not working with non-ASCII alphanumeric characters

    Hello, Thank you for your amazing django package

    When used slugify template tag for tabs not working with non-ASCII alphanumeric characters

    https://github.com/fabiocaccamo/django-admin-interface/blob/8d82d80c19f76f409f75456bf974966f6d8295a2/admin_interface/templates/admin/change_form.html#L21

    instated you can used forloop counter

    used tab with loop of counter for fieldset

    <button type="button" id="tablink-tab{{  forloop.counter   }}" class="tabbed-changeform-tablink {{ forloop.counter0|default:'active' }}" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab{{forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
    

    Used** tab0 for fieldsets without tabs

    used itab with loop counter for inlines formset

    <button type="button" id="tablink-itab{{ forloop.counter }}" class="tabbed-changeform-tablink" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'itab{{ forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
    

    this is full patch code:

      <div id="tabbed-changeform-tabs" class="tabbed-changeform-tabs">
    
                {% if show_fieldsets_as_tabs %}
                    {% for fieldset in adminform %}
    
                    {% with fieldset.name|default_if_none:opts.verbose_name as tab_name %}
                    <button type="button" id="tablink-tab{{  forloop.counter   }}" class="tabbed-changeform-tablink {{ forloop.counter0|default:'active' }}" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab{{forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
    
                    {% endfor %}
                {% else %}
                    {% with opts.verbose_name as tab_name %}
                    <button type="button" id="tablink-tab0" class="tabbed-changeform-tablink active" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'tab0')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
                {% endif %}
    
                {% if show_inlines_as_tabs %}
                    {% for inline_admin_formset in inline_admin_formsets %}
                    {% with inline_admin_formset.opts.verbose_name_plural as tab_name %}
                    <button type="button" id="tablink-itab{{ forloop.counter }}" class="tabbed-changeform-tablink" onclick="AdminInterface.tabbedChangeForm.openTab(event, 'itab{{ forloop.counter }}')">
                        {{ tab_name|capfirst }}
                    </button>
                    {% endwith %}
                    {% endfor %}
                {% endif %}
    
                <span class="tabbed-changeform-tabs-remaining-space"></span>
    
            </div>
    
            {% if show_fieldsets_as_tabs %}
                {% for fieldset in adminform %}
                {% with fieldset.name|default_if_none:opts.verbose_name as tab_name %}
                <div id="tabcontent-tab{{ forloop.counter }}" class="tabbed-changeform-tabcontent {{ forloop.counter0|default:'active' }}">
                    {% include "admin/includes/headerless_fieldset.html" %}
                </div>
                {% endwith %}
                {% endfor %}
            {% else %}
                {% with opts.verbose_name as tab_name %}
                <div id="tabcontent-tab0" class="tabbed-changeform-tabcontent active">
                {% for fieldset in adminform %}
                    {% include "admin/includes/fieldset.html" %}
                {% endfor %}
                </div>
                {% endwith %}
            {% endif %}
    
            {% for inline_admin_formset in inline_admin_formsets  %}
            {% with inline_admin_formset.opts.verbose_name_plural as tab_name %}
            <div id="tabcontent-itab{{ forloop.counter }}" class="tabbed-changeform-tabcontent">
                {% get_admin_interface_inline_template inline_admin_formset.opts.template as inline_template %}
                {% include inline_template %}
            </div>
            {% endwith %}
            {% endfor %}
    
    bug 
    opened by EngFarisAlsmawi 2
  • Dashboard feature

    Dashboard feature

    When building django admin apps, it is usually nice to have a custom dashboard to display extra data.

    Take a look a django-unfold package and see how that is achieved, it'll be nice to have something similar.

    enhancement 
    opened by Ladet02 3
  • Initial changes for Dark mode :

    Initial changes for Dark mode :

    Related to #129

    This PR lays the ground work for using a proper dark mode. This PR is meant to validate and allow two separate themes at the same time

    • [X] Adds a new param active_dark to designate a theme to be used for dark mode
    • [X] Splits outs Styles in base_site.html into separate file that is included
    • [X] Updates the new ThemeQueryset, model function and signals to handle for use_dark
    • [X] Add active dark checkbox for admin listview
    • [X] Tests

    TODO in a different PR :

    • Override Django's css variables with colors from the theme
    enhancement 
    opened by VaZark 6
  • Add new `css_generic_link_active_color` field to use on active tab (tabbed changeform).

    Add new `css_generic_link_active_color` field to use on active tab (tabbed changeform).

    Yes, adding a css_generic_link_active_color would solve any doubt and would also be available for possible other future cases.

    Originally posted by @fabiocaccamo in https://github.com/fabiocaccamo/django-admin-interface/issues/231#issuecomment-1352912993

    enhancement 
    opened by fabiocaccamo 0
  • Custom Admin Page

    Custom Admin Page

    Hello !! I've recently discovered this project in my quest to reuse the admin page as much as possible for a minimal backoffice. I love that ability to theme and all the little features like dropdown for filters that make a big difference to UX.

    Requested feature Do you have any plans on adding support for a custom Admin Page?

    Feature context Currently, I am hitting a wall with the reusability of the admin. I'd like to make custom pages with a custom queryset in order to have custom pages for KPIs and charts, internal forms and tiny little backoffice features.

    A quick look at the code shows me that it needs to be an admin_view or tied to BaseModelAdmin. I'm currently working on trying to replicate it but it's a wip and I'm pretty lost haha

    What it brings to project This would be a major differentiator against the standard admin. Since, django admin comes loaded with default widgets and permissons, there is far less logic to be written if we need only a few custom pages for a backoffice.

    Other solutions : I've taken a look at django-admin-views but I'm not been able to get it working so far. (I've raised a bug report at the moment)

    enhancement 
    opened by VaZark 3
  • Sticky table header and columns (action checkbox column and first field column).

    Sticky table header and columns (action checkbox column and first field column).

    It would be very useful having the possibility to set sticky table columns in the changelist (action checkbox column if actions are enabled + list_display_links columns), and also in the tabular inlines table.

    This feature would improve tables UX, especially when there is horizontal scroll.

    NOTE: should test also with RTL languages.

    enhancement 
    opened by fabiocaccamo 5
Releases(0.24.2)
  • 0.24.2(Dec 19, 2022)

  • 0.24.1(Dec 14, 2022)

  • 0.24.0(Dec 11, 2022)

    • Drop Python < 3.8 and Django < 2.2 versions support. (by @merwok in #220)
    • Replace str.format with f-strings.
    • Remove post_migrate signal handler and multi db test.
    • Add german translation. (by @derzinn in #222)
    • Include date hierarchy in quick removal links (by @merwok in #218)
    • Fix broken tabbed inline name. (by @VaZark in #221)
    • Minor cleanups. (by @merwok in #225)
    • Bump actions and requirements.
    • [css] Fix inlines vertical alignement. (by @VaZark in #201)
    • [css] Fix tabbed changeform tabs text color on focus. (by @VaZark in #223)
    • [CI] Add Farsi language to tests.settings.LANGUAGES. (by @merwok)
    • [CI] Update pre-commit config.
    • [CI] Automate package build and publish on PyPI.
    Source code(tar.gz)
    Source code(zip)
  • 0.23.0(Nov 30, 2022)

    • Add Python 3.11 support.
    • Add tabbed changeform support. (by @VaZark in #211)
    • Fix #208 / Do not assume active DB when not specified. (by @VaZark in #210)
    • Update translations.
    • Bump actions and requirements.
    • [css] Adjust list filter dropdown vertical margins.
    • [css] Improve nav filter style. #214
    • [css] Improve language chooser style.
    • [css] Reduce secondary scrollbars size.
    • [CI] Update dependabot.yml
    • [CI] Add pre-commit-autoupdate.yml workflow.
    • [CI] Update pre-commit hooks.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.2(Nov 18, 2022)

    • [CI] Add django 4.1 to tests.
    • [CI] Add pre-commit with black, isort and flake8.
    • Respect using in signals. #199 (by @VaZark in #200)
    • Remove translations line numbers to avoid lint step failures.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.1(Oct 13, 2022)

    • Fix KeyError raised by django-rangefilter.
    • [css] Add django-rangefilter style optimizations.
    • [css] Fix list-filter dropdown vertical margins.
    • [css] Fix calendar prev/next arrows style.
    Source code(tar.gz)
    Source code(zip)
  • 0.22.0(Oct 12, 2022)

    • Add CI checks for migrations and translations. #184 (by @merwok in #186)
    • Add option for list filter quick remove. #181 (by @merwok in #183)
    • [css] Fix left/right scrolling broken with django-import-export. #165
    • [html] Fix duplicated welcome message. #185
    Source code(tar.gz)
    Source code(zip)
  • 0.21.0(Oct 6, 2022)

    • Add language chooser control option (default select, minimal select). #136
    • Add option to make active list filters more visible. #174 (by @merwok in #178)
    • Add support for collapsible fieldsets that start expanded. #173 (by @merwok in #177)
    • [js] Fix modal window not closing on save with django >= 4.0. #169
    • [css] Move language-chooser style to its own CSS file.
    • [css] Fix sticky list filter scrolling. #175
    • [css] Fix paginator missing border-top on mobile.
    Source code(tar.gz)
    Source code(zip)
  • 0.20.0(Aug 25, 2022)

  • 0.19.2(Aug 4, 2022)

  • 0.19.1(May 14, 2022)

  • 0.19.0(May 14, 2022)

  • 0.18.7(Feb 24, 2022)

  • 0.18.6(Feb 4, 2022)

  • 0.18.5(Jan 21, 2022)

  • 0.18.4(Jan 5, 2022)

    • Added official django 4.0 support.
    • Added link to admin home page on logo and title. #147
    • Fixed collapsed inlines rounded bottom borders.
    • Fixed missing comma in tests settings MIDDLEWARE_CLASSES. #145
    Source code(tar.gz)
    Source code(zip)
  • 0.18.3(Dec 7, 2021)

    • Added official python 3.10 support.
    • Replaced travis with GitHub action workflow. #142
    • Fixed check_installed_apps checks.
    • Fixed django default appconfig deprecation warning. #141
    Source code(tar.gz)
    Source code(zip)
  • 0.18.2(Nov 25, 2021)

  • 0.18.1(Jan 5, 2022)

  • 0.18.0(Nov 24, 2021)

  • 0.17.3(Oct 12, 2021)

  • 0.17.2(Oct 8, 2021)

  • 0.17.1(Sep 24, 2021)

    • Fixed TemplateDoesNotExist error on django==4.0.a1 removing checking condition for colorfield package. #134
    • Fixed favicon fetching incompatible with django-storages S3. #128
    Source code(tar.gz)
    Source code(zip)
  • 0.17.0(Sep 16, 2021)

  • 0.16.4(Sep 16, 2021)

    • Fixed 0020_module_selected_colors migration for multiple dbs. #132
    • Fixed sticky pagination width and border-bottom.
    • Fixed inlines vertical overlow.
    • Improved header elements vertical alignment.
    Source code(tar.gz)
    Source code(zip)
  • 0.16.3(Apr 26, 2021)

  • 0.16.2(Apr 23, 2021)

    • Added python 3.9 and django 3.2 to CI.
    • Added FileExtensionValidator to logo and favicon fields. #112
    • Fixed models.W042 warning on django 3.2.
    • Fixed header min-height.
    • Fixed selects min-width.
    • Fixed changelist search, actions and submit button horizontal margins.
    • Fixed related widget wrapper margin/padding with normal select and in inlines.
    • Fixed tabular inlines horizontal scroll.
    Source code(tar.gz)
    Source code(zip)
  • 0.16.1(Apr 7, 2021)

    • Fixed style of "Delete" and "Save" buttons in the delete confirmation page. #123
    • Overridden dark-mode css variables introduced in django 3.2. #124
    Source code(tar.gz)
    Source code(zip)
  • 0.16.0(Mar 30, 2021)

    • Added customizable colors for selected apps and models in dashboard. #122
    • Added responsive_rtl.css stylesheet. #98
    • Updated vazir-font version to 27.2.2. #98
    Source code(tar.gz)
    Source code(zip)
Owner
Fabio Caccamo
Python/Django, JavaScript/Vue-JS, Node/Gulp/Sass, Objective-C
Fabio Caccamo
aiohttp admin is generator for admin interface based on aiohttp

aiohttp admin is generator for admin interface based on aiohttp

Mykhailo Havelia 17 Nov 16, 2022
Django app that enables staff to log in as other users using their own credentials.

Impostor Impostor is a Django application which allows staff members to login as a different user by using their own username and password. Login Logg

Andreu Vallbona Plazas 144 Dec 13, 2022
xarray: N-D labeled arrays and datasets

xarray is an open source project and Python package that makes working with labelled multi-dimensional arrays simple, efficient, and fun!

Python for Data 2.8k Dec 29, 2022
fastapi-admin is a fast admin dashboard based on FastAPI and TortoiseORM with tabler ui, inspired by Django admin.

fastapi-admin is a fast admin dashboard based on FastAPI and TortoiseORM with tabler ui, inspired by Django admin.

fastapi-admin 1.6k Dec 30, 2022
There is a new admin bot by @sinan-m-116 .

find me on telegram! deploy me on heroku, use below button: If you can't have a config.py file (EG on heroku), it is also possible to use environment

Sinzz-sinan-m 0 Nov 09, 2021
Visually distinguish environments in Django Admin

django-admin-env-notice Visually distinguish environments in Django Admin. Based on great advice from post: 5 ways to make Django Admin safer by hakib

Yuri Shikanov 258 Nov 30, 2022
Legacy django jet rebooted , supports only Django 3

Django JET Reboot Rebooting the original project : django-jet. Django Jet is modern template for Django admin interface with improved functionality. W

215 Dec 31, 2022
Django Smuggler is a pluggable application for Django Web Framework that helps you to import/export fixtures via the automatically-generated administration interface.

Django Smuggler Django Smuggler is a pluggable application for Django Web Framework to easily dump/load fixtures via the automatically-generated admin

semente 373 Dec 26, 2022
A user-friendly JSON editing form for Django admin

A user-friendly JSON editing form for Django admin

Bharat Chauhan 141 Dec 30, 2022
Material Design for Django

Django Material Material design for Django. Django-Material 1.7.x compatible with Django 1.11/2.0/2.1/2.2/3.0/3.1 Django-Material 1.6.x compatible wit

Viewflow 2.5k Jan 01, 2023
GFPGAN is a blind face restoration algorithm towards real-world face images.

GFPGAN is a blind face restoration algorithm towards real-world face images.

Applied Research Center (ARC), Tencent PCG 25.6k Jan 04, 2023
Responsive Theme for Django Admin With Sidebar Menu

Responsive Django Admin If you're looking for a version compatible with Django 1.8 just install 0.3.7.1. Features Responsive Sidebar Menu Easy install

Douglas Miranda 852 Dec 02, 2022
Simple and extensible administrative interface framework for Flask

Flask-Admin The project was recently moved into its own organization. Please update your references to Flask-Admin 5.2k Dec 29, 2022

Extendable, adaptable rewrite of django.contrib.admin

django-admin2 One of the most useful parts of django.contrib.admin is the ability to configure various views that touch and alter data. django-admin2

Jazzband 1.2k Dec 29, 2022
Python code for "Machine learning: a probabilistic perspective" (2nd edition)

Python code for "Machine learning: a probabilistic perspective" (2nd edition)

Probabilistic machine learning 5.3k Dec 31, 2022
Python books free to read online or download

Python books free to read online or download

Paolo Amoroso 3.7k Jan 08, 2023
Real-time monitor and web admin for Celery distributed task queue

Flower Flower is a web based tool for monitoring and administrating Celery clusters. Features Real-time monitoring using Celery Events Task progress a

Mher Movsisyan 5.5k Dec 28, 2022
Django Semantic UI admin theme

Django Semantic UI admin theme A completely free (MIT) Semantic UI admin theme for Django. Actually, this is my 3rd admin theme for Django. The first

Alex 69 Dec 28, 2022
Extendable, adaptable rewrite of django.contrib.admin

django-admin2 One of the most useful parts of django.contrib.admin is the ability to configure various views that touch and alter data. django-admin2

Jazzband 1.2k Dec 29, 2022
WordPress look and feel for Django administration panel

Django WP Admin WordPress look and feel for Django administration panel. Features WordPress look and feel New styles for selector, calendar and timepi

Maciej Marczewski 266 Nov 21, 2022