Skip to main content

Collection of admin fields, decorators and mixin to help to create computed or custom fields more friendly and easy way

https://pypip.in/v/django-admin-easy/badge.png?style=flat https://pypip.in/d/django-admin-easy/badge.png?style=flat https://travis-ci.org/ebertti/django-admin-easy.svg?branch=master&style=flat https://coveralls.io/repos/ebertti/django-admin-easy/badge.png?branch=master&style=flat https://landscape.io/github/ebertti/django-admin-easy/master/landscape.png?style=flat

Installation

  1. pip install django-admin-easy

How it Works

When you want to display a field on Django Admin, and this field doesn’t exist in your Model or you need to compute some information, like a Image or Link, you will need to create a method on your ModelAdminClass like this:

from django.contrib import admin

class YourAdmin(admin.ModelAdmin):
    fields = ('sum_method', 'some_img', 'is_true')

    def sum_method(self, obj):
        sum_result = obj.field1 + obj.field2 + obj.field3
        return '<b>%s</b>' % sum_result
    sum_method.short_description = 'Sum'
    sum_method.admin_order_field = 'field1'
    sum_method.allow_tags = True

    def some_img(self, obj):
        return '<img scr="%s">' % obj.image
    some_img.short_description = 'image'
    some_img.admin_order_field = 'id'
    some_img.allow_tags = True

    def is_true(self, obj)
        return obj.value > 0
    is_true.short_description = 'Positive'
    is_true.admin_order_field = 'value'
    is_true.boolean = True

It takes to much lines! =D

With django-admin-easy you can easy create this field with less lines:

from django.contrib import admin
import easy

class YourAdmin(admin.ModelAdmin):
    fields = ('sum_method', 'some_img', 'is_true')

    sum_method = easy.SimpleAdminField(lambda obj: '<b>%s</b>' % (obj.field1 + obj.field2 + obj.field3), 'Sum', 'field1', True)
    some_img = easy.ImageAdminField('image', 'id')
    is_true = easy.BooleanAdminField('Positive', 'value')

If you still prefer using a custom method, you can use our decorators, like this:

from django.contrib import admin
import easy

class YourAdmin(admin.ModelAdmin):
    fields = ('sum_method', 'some_img', 'is_true')

    @easy.smart(short_description='Sum', admin_order_field='field1', allow_tags=True )
    def sum_method(self, obj):
        sum_result = obj.field1 + obj.field2 + obj.field3
        return '<b>%s</b>' % sum_result

    @easy.short(desc='image', order='id', tags=True)
    def some_img(self, obj):
        return '<img scr="%s">' % obj.image

    @easy.short(desc='Positive', order='value', bool=True)
    def is_true(self, obj)
        return obj.value > 0

More Examples

from django.contrib import admin
import easy

class YourAdmin(admin.ModelAdmin):
    list_fields = ('id', 'custom1', 'custom2', 'custom3' ... 'customN')

    actions = ('simples_action',)

    @easy.action('My Little Simple Magic Action')
    def simple_action(self, request, queryset)
        return queryset.update(magic=True)


    # render a value of field, method, property or your model or related model
    custom1 = easy.SimpleAdminField('model_field')
    custom1 = easy.SimpleAdminField('method_of_model')
    custom2 = easy.SimpleAdminField('related.attribute_or_method')
    custom4 = easy.SimpleAdminField('related_set.count', 'count')
    custom5 = easy.SimpleAdminField(lambda x: x.method(), 'show', 'order_by')

    # render boolean fields
    custom6 = easy.BooleanAdminField(lambda x: x.value > 10, 'high')

    # render foreignkey with link to change_form in admin
    custom7 = easy.ForeignKeyAdminField('related')

    # render foreignkey with link to change_form in admin and related_id content as text
    custom8 = easy.ForeignKeyAdminField('related', 'related_id')

    # render template
    custom9 = easy.TemplateAdminField('test.html', 'shorty description', 'order_field')

    # render to change_list of another model with a filter on query
    custom10 = easy.LinkChangeListAdminField('app_label', 'model_name', 'attribute_to_text', {'field_name':'field_to_query'})

    # display image of some model
    custom11 = easy.ImageAdminField('image', {'image_attrs':'attr_value'})

    @easy.smart(short_description='Field Description 12', admin_order_field='model_field')
    def custom12(self, obj):
        return obj.something_cool()

    @easy.short(desc='Field Description 13', order='model_field', tags=True)
    def custom13(self, obj):
        return '<b>' + obj.model_field + '</b>'

    @easy.short(desc='Field Description 14', order='model_field', bool=True)
    def custom14(self, obj):
        return obj.model_field > 10

If you want to use on admin form to show some information, don’t forget to add your custom field on readonly_fields attribute of your admin class

from django.contrib import admin
import easy

class YourAdmin(admin.ModelAdmin):
    fields = ('custom1', 'custom2', 'custom3' ... 'customN')
    readonly_fields = ('custom1', 'custom2', 'custom3' ... 'customN')

    custom1 = easy.ForeignKeyAdminField('related')
    # ...

Mixin

To help you to create a custom view on django admin, we create de MixinEasyView for your Admin Classes

from django.contrib import admin
import easy

class MyModelAdmin(easy.MixinEasyView, admin.ModelAdmin):
    # ...

    def easy_view_jump(self, request, pk=None):
        # do something here
        return HttpResponse('something')

To call this view, you can use this reverse:

from django.core.urlresolvers import reverse

# to do something with one object of a model
reverse('admin:myapp_mymodel_easy', args=(obj.pk, 'jump'))

# or to do something with a model
reverse('admin:myapp_mymodel_easy', args=('jump',))

Or one HTML template

#<!-- to do something with one object of a model -->
{% url 'admin:myapp_mymodel_easy' obj.pk 'jump' %}

#<!-- or to do something with a model -->
{% url 'admin:myapp_mymodel_easy' 'jump' %}

So easy, no?

Screenshot

Using example of poll of django tutorial

https://raw.githubusercontent.com/ebertti/django-admin-easy/master/screenshot/more.png https://raw.githubusercontent.com/ebertti/django-admin-easy/master/screenshot/related.png

Please help us

This project is still under development. Feedback and suggestions are very welcome and I encourage you to use the Issues list on Github to provide that feedback.

Authors

The django-admin-easy was original created by Ezequiel Bertti @ebertti October 2014.

Changelog

  • 0.2.2

    • Add MixinEasyView

  • 0.2.1

Metadata

Release files for django-admin-easy 0.2.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-admin-easy 0.2.2.1
File Size Uploaded
django-admin-easy-0.2.2.1.zip 15.7 kB Details

Release files / django-admin-easy-0.2.2.1.zip

Download URL django-admin-easy-0.2.2.1.zip
Size 15.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9a5b995403a9eff4742cfa9899856ab1aedd43e5e3ff78a3f51a520867bcc111
BLAKE2b-256 checksum
How to use checksums
8acb095eb970ccb8f7c77cc65d1a935cec817e316e873b168124d49b8bd51877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6

2 release files

0.5.1

2 release files

0.5

2 release files

0.4.1

2 release files

0.4

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3

1 release file

This release

0.2.2.1 This release

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page