Skip to main content

Django app enabling painless creation of additional admin object tools.

Project description

Django Object Tools

Django app enabling painless creation of additional admin object tools.

https://github.com/downloads/praekelt/django-object-tools/example-tools.png

This packages is part of the larger Jmbo project.

Installation

  1. Install or add django-object-tools to your python path.

  2. Add object_tools to your INSTALLED_APPS setting. django-object-tools overrides certain admin templates so you have to add it before django.contrib.admin.

  3. Call object tool’s autodiscover method. This works in a similar fashion as Django’s admin; discovering which tools to render in admin. You can do this in any module that is called during initialization but we recommend doing it in urls.py, as illustrated in the next point.

  4. Hook up URLConf. Do this by pointing a given URL at the tools.urls method. In this example, we register the default Tools instance object_tools.tools at the URL /object-tools/:

    # urls.py
    from django.conf.urls.defaults import *
    
    import object_tools
    
    object_tools.autodiscover()
    
    urlpatterns = patterns('',
        (r'^object-tools/', include(object_tools.tools.urls)),
    )
  5. Obviously Django Admin itself needs to be installed, as described here.

  6. Remember to run syncdb whenever you install new tools to setup permissions.

Usage

django-object-tools itself doesn’t do much in terms of providing useful tools. Its purpose is to simplify creation and integration of custom tools delivered by other Django applications. To that end it takes care of the messy details like permissions and admin template integration so you can focus on the fun stuff.

As an example lets create a tool allowing you to delete all objects. Yes this is a bit convoluted but it’s a good toy example for illustration purposes. Have a look at django-export and django-order for examples of real world tools leveraging django-object-tools.

Firstly create a Django app folder structure as per usual, with the root directory named delete, including a file called tools.py. It should look as follows:

delete/
    __init__.py
    tools.py

Edit tools.py to look like this:

from django.contrib.admin.actions import delete_selected
import object_tools

class Delete(object_tools.ObjectTool):
    name = 'delete'
    label = 'Delete all'

    def view(self, request, extra_context=None):
        queryset = self.model.objects.all()
        response = delete_selected(self.modeladmin, request, queryset)
        if response:
            return response
        else:
            return self.modeladmin.changelist_view(request)

object_tools.tools.register(Delete)

Let’s go through that line by line:

  1. object_tools behaves similarly to Django’s admin allowing you to explicitly register tools, see line 17. It also provides the ObjectTool base class.

  1. import delete_selected method provided by Django. This method will do all the heavy lifting.

  1. Create a tool class inheriting from object_tools.ObjectTool. All object tools have to inherit from object_tools.ObjectTool. ObjectTool provides various methods to simplify creation of tools. See object_tools.options.py for more details.

  2. Set tool name to delete. This has to be a unique name identifying the tool. This is used to uniquely identify the tool internally and for instance to setup permissions.

  3. Set label to Delete all. The label is displayed within admin and not the name, thus allowing you to specify a more verbose, user friendly label.

  1. Implement view method. This is the brains of your tool. The view method is called when the user executes your tool, so your tool logic would go here. This can be any view like code, as long as it returns an HttpResponse object. In this case we wrap Django’s built-in delete_selected to provide the form, logic and template code to perform the actual delete.

  1. Register the tool with object_tools, thus enabling its display in admin.

To enable the tool add delete to your INSTALLED_APPS setting.

Now when you navigate to the change list view of any model you’ll find the delete all object tool in the upper right hand corner.

https://github.com/downloads/praekelt/django-object-tools/delete-example-final.png

Clicking on the Delete all tool fires of the view and proceeds with deleting objects as per usual.

Note: django-object-tools adds per tool permissions to the built-in set of default Django permissions. So in this example only superusers or users who have the the Can delete <model> permission will be able to see and use the tool. If you can’t see or use a particular tool make sure the authenticated user has the required permissions to do so.

AUTHORS

Praekelt Foundation

  • Shaun Sephton

Changelog

0.0.4

  1. Better packaging.

0.0.3 (2011-09-15)

  1. Correctly resolve title.

0.0.1 (2011-07-22)

  1. Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-object-tools-0.0.4.tar.gz (15.9 kB view details)

Uploaded Source

Built Distributions

django_object_tools-0.0.4-py2.7.egg (26.2 kB view details)

Uploaded Source

django_object_tools-0.0.4-py2.6.egg (26.3 kB view details)

Uploaded Source

File details

Details for the file django-object-tools-0.0.4.tar.gz.

File metadata

File hashes

Hashes for django-object-tools-0.0.4.tar.gz
Algorithm Hash digest
SHA256 9d9bb6fbb904c6d227f91337f207a6fe371749eed46039e01216d04d9fa66d28
MD5 308d6b7d2ea4679c33601b3fecafb4d4
BLAKE2b-256 c3ba44654420d5059b7c7142ff5dcd8a16e68c2ef60d159df78be42f91468dc5

See more details on using hashes here.

File details

Details for the file django_object_tools-0.0.4-py2.7.egg.

File metadata

File hashes

Hashes for django_object_tools-0.0.4-py2.7.egg
Algorithm Hash digest
SHA256 4f8a7f2e5b1eb7a45d028f44b051bb0251456699e1f346d321e139ae65c8bb25
MD5 48a0f193d3b73e1f3929d1a03d898bdc
BLAKE2b-256 847f1bb0f9aee7650349416355b78705aed42994d954aea96a73faee5e40496c

See more details on using hashes here.

File details

Details for the file django_object_tools-0.0.4-py2.6.egg.

File metadata

File hashes

Hashes for django_object_tools-0.0.4-py2.6.egg
Algorithm Hash digest
SHA256 4b62ba25855529be36f6d74027004c534575113910f2c21ba83de05b5ead286e
MD5 ca234680458c01192f0163c55179d3c2
BLAKE2b-256 f722dd6102838e3fe5144450e48ce9260e18203fc4b4261e16540600c16dc7ee

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page