Metadata-Version: 2.1
Name: django-admin-steroids
Version: 1.0.37
Summary: Tweaks and tools to simplify Django admin.
Home-page: https://gitlab.com/chrisspen/django-admin-steroids
Author: Chris Spencer
Author-email: chrisspen@gmail.com
License: LGPL
Description: Django Admin Steroids - Tweaks and tools to extend Django admin
        ===============================================================
        
        [![](https://img.shields.io/pypi/v/django-admin-steroids.svg)](https://pypi.python.org/pypi/django-admin-steroids)
        [![Pipeline Status](https://gitlab.com/chrisspen/django-admin-steroids/badges/master/pipeline.svg)](https://gitlab.com/chrisspen/django-admin-steroids/commits/master) 
        
        Overview
        --------
        
        Django's admin supports a lot of customization. However, the current
        implementation relies on the use of class values and methods, requiring a lot
        of code duplication. This project contains classes, mixins, and a few templates
        that improve the usability and maintainability of Django's admin, and implement
        some missing features.
        
        Features
        --------
        
        **ModelAdmin mixins:**
        
        - ReadonlyModelAdmin - Removes all editability from the ModelAdmin.
        
        - CSVModelAdmin - Adds a changelist action to export the selected records as a CSV.
        
        - FormatterModelAdmin - Allows the use of admin field formatters.
        
        - BetterRawIdFieldsModelAdmin - Adapted from a `Django Snippet
          <http://djangosnippets.org/snippets/2217/>`_,
          this formats all raw id fields with a convenient link to that record's
          corresponding admin change page.
        
        **Field formatters:**
        
        If you want to format a monetary dollar value with a dollar sign
        and commas, you have to implement a myvariable_dollars() method in your
        ModelAdmin class that returns the desired string, and then list this method
        in the ModelAdmin's readonly_fields list.
        
        In many non-trivial applications, I found myself writing a huge number of these
        functions, most of which were nearly identical. So I decided to abstract this
        functionality into a number of classes that could be instantiated and easily
        plugged into a ModelAdmin.
        
        Pre-built formatters include:
        
        - DollarFormat
        
        - PercentFormat
        
        - CenterFormat
        
        - NbspFormat
        
        - BooleanFormat
        
        - ForeignKeyLink
        
        - OneToManyLink
        
        Formatters are used by wrapping them around field names in a ModelAdmin.
        Say you have a model with a field called `income` that you want to display in
        admin formatted with a dollar sign. Normally, you'd do something like this:
        
            class BudgetAdmin(admin.ModelAdmin):
            
                fields = (
                    'id',
                    'name',
                    'income_str',
                )
                
                readonly_fields = (
                    'income_str',
                )
                
                def income_str(self, request, obj=None):
                    if obj is None:
                        return
                    return '$%.2f' % obj.income
        
        Formatters simply this process. In this example, you could use the DollarFormat
        class to accomplish the same thing with much less code:
        
            from admin_steroids import FormatterModelAdmin
            from admin_steroids.formatters import DollarFormat
            
            class BudgetAdmin(FormatterModelAdmin):
            
                fields = (
                    'id',
                    'name',
                    DollarFormat('income', decimals=2),
                )
        
        **Ajax list filters:**
        
        Django's default admin list filters don't allow selecting multiple values
        for a field, nor do they handle fields with large numbers of values.
        Fields render **all** values in a list or select drop-down, slowing down page
        load and wasting screen space.
        
        I've implemented a custom AjaxFieldFilter which allows you to search for one
        or more values via an Ajax-powered search bar, so admin still renders quickly
        while the user is still able to search for any value used by the field.
        
        In your admin, add the AjaxFieldFilter like:
        
            from django.contrib import admin
            from admin_steroids.filters import AjaxFieldFilter
            import models
            
            class MyModelAdmin(admin.ModelAdmin):
            
                list_filters = (
                    ('myfield', AjaxFieldFilter),
                )
                
            admin.site.register(models.MyModel, MyModelAdmin)
        
        Then, in your settings.py, add 'admin_steroids' to your `INSTALLED_APPS`, and flag your field as safe to search:
        
            INSTALLED_APPS = [
                ...,
                'admin_steroids',
            ]
        
            DAS_ALLOWED_AJAX_SEARCH_PATHS = [
                ('myapp', 'mymodel', 'myfield'),
            ]
            
            DAS_AJAX_SEARCH_PATH_FIELDS = {
                # This assumed "myfield" a ForeignKey, pointing to a model that has
                # a "name" and "slug" field you want to search.
                # If "myfield" is a simple CharField, you don't need to specify
                # anything here.
                ('myapp', 'mymodel', 'myfield'): ('name', 'slug'),
            }
        
        Finally, add admin_steroids to your urls.py to expose the Ajax search URLs,
        which by default will be rendered in the form `/admin/<app>/<model>/field/<field>/search`:
        
            urlpatterns = patterns('',
                ...
            
                # Should go before the actual admin, so it won't be overridden.
                (r'^admin/', include('admin_steroids.urls')),
                
                (r'^admin/', include(admin.site.urls)),
                
                ...
            )
        
        You can override these URLs by excluding the URL include above and specifying
        your own pattern pointing to admin_steroids.views.ModelFieldSearchView.
        
        See admin_steroids.urls for an example.
        
        Installation
        ------------
        
        Install the package via pip with:
        
            pip install django-admin-steroids
        
        Development
        -----------
        
        Tests require the Python development headers to be installed, which you can install on Ubuntu
        using the [Dead Snakes PPA](https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes) with:
        
            sudo apt-get install python-dev python3-dev python3.4-minimal python3.4-dev python3.5-minimal python3.5-dev  python3.6-minimal python3.6-dev
        
        To run all [tests](http://tox.readthedocs.org/en/latest/):
        
            export TESTNAME=; tox
        
        To run tests for a specific environment (e.g. Python 3.7 with Django 3.2):
            
            export TESTNAME=; tox -e py37-django32
        
        To run a specific test:
            
            export TESTNAME=.test_widgets; tox -e py37-django32
        
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Framework :: Django
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.9
Description-Content-Type: text/markdown
