Metadata-Version: 2.1
Name: django-admin-extras
Version: 1.0.2
Summary: Extra features for django.contrib.admin
Home-page: https://github.com/artrey/django-admin-extras.git
Author: Alexander Ivanov
Author-email: oz.sasha.ivanov@gmail.com
License: MIT
Keywords: django admin filter
Platform: any
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Dist: django (>=2.0)

Installation
------------

For installing graphene, just run this command in your shell

.. code:: bash

    pip install django-admin-extras

Settings
--------

.. code:: python

    INSTALLED_APPS = (
        # ...
        'django_admin_extras',
        # ...
    )

Examples
--------

Here is a simple Django model:

.. code:: python

    from django.db import models


    class TodoList(models.Model):
        title = models.CharField(max_length=64)

        def __str__(self):
            return self.title


    class TodoItem(models.Model):
        text = models.CharField(max_length=256)
        checked = models.BooleanField(default=False)
        list = models.ForeignKey(TodoList, on_delete=models.CASCADE)

        def __str__(self):
            return self.text

Here is a simple Django admin for models above:

.. code:: python

    from django.contrib import admin
    from django.db.models import Q

    from django_admin_extras import InputFilter, custom_titled_filter, custom_view_field

    from .models import TodoItem


    class TodoItemTextFilter(InputFilter):
        parameter_name = 'todoitem__text'
        title = 'todo item text'

        def queryset(self, request, queryset):
            if self.value() is not None:
                q = Q()
                for text_part in self.value().split():
                    q &= Q(text__icontains=text_part)
                return queryset.filter(q)


    @admin.register(TodoItem)
    class TodoItemAdmin(admin.ModelAdmin):
        list_display = 'text', 'custom_text', 'checked', 'custom_bool',
        list_filter = TodoItemTextFilter, ('checked', custom_titled_filter('test title for checked filter')),

        @custom_view_field(admin_order_field='-text')
        def custom_text(self, obj: TodoItem) -> str:
            return obj.text + ' custom'

        @custom_view_field(boolean=True, short_description='Not checked')
        def custom_bool(self, obj: TodoItem) -> bool:
            return not obj.checked


