#9749: ModelAdmin should allow specifying Changelist class to further modify
Changelist behavior
--------------------------------------------+-------------------------------
Reporter: anonymous | Owner: nobody
Status: new | Milestone:
Component: django.contrib.admin | Version: 1.0
Keywords: ModelAdmin Changelist subclass | Stage: Unreviewed
Has_patch: 0 |
--------------------------------------------+-------------------------------
I've been poking around the Django source as I want to add a column to the
changelist view. Specifically, this column is a consolidation of a
ManyToMany relationship. I'll use it as an example here.
In options.py, class ModelAdmin defines a function that instantiates a
Changelist:
{{{
class ModelAdmin(BaseModelAdmin):
def __init__(self, model, admin_site):
self.model = model
self.opts = model._meta
self.admin_site = admin_site
#more code
#more code, more functions
def changelist_view(self, request, extra_context=None):
"The 'change list' admin view for this model."
#more code here
from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
#more code here
try:
cl = ChangeList(request, self.model, self.list_display,
self.list_display_links, self.list_filter,
self.date_hierarchy, self.search_fields,
self.list_select_related, self.list_per_page, self)
#more code here
}}}
I propose the class 'ChangeList' be easily overidable, like so:
{{{
from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
class ModelAdmin(BaseModelAdmin):
changelist_class = ChangeList
def __init__(self, model, admin_site):
self.model = model
self.opts = model._meta
self.admin_site = admin_site
self.changelist_class = changelist_class
#more code
def changelist_view(self, request, extra_context=None):
"The 'change list' admin view for this model."
#more code here
from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
#more code here
try:
cl = self.changelist_class(request, self.model,
self.list_display, self.list_display_links, self.list_filter,
self.date_hierarchy, self.search_fields,
self.list_select_related, self.list_per_page, self)
#more code here
}}}
This would allow one to easily override some ChangeList methods from an
admin.py file:
{{{
from models import Object, ObjectRelationToWidget
#ObjectRelationToWidget acts as the ManyToMany bridge table
from django.contrib.admin.views.main import ChangeList
class ObjectChangeList(ChangeList):
def get_results(self, request):
r = ObjectRelationToWidget.objects.all().select_related()
#this puts all the Objects and Widgets into the queryset cache
results = []
for obj in r:
r.object._v_local = {}
r.object._v_local['widget_name'] = r.widget.name
r.object.widget_name = lambda x: return
x._v_local['widget_name']
results.append(r.object)
self.result_count = len(results)
self.full_result_count = len(results)
self.result_list = results
class ObjectAdmin(admin.ModelAdmin):
changelist_class = ObjectChangeList
list_display = ["object_name", "widget_name"]
}}}
Are there any thoughts on this suggestion? It is simple to add as a
feature, but I suppose the usefulness may be seen as somewhat dubious.
Suggestions for 'doing this better' (putting a related ManyToMany field in
the admin changelist) would be appreciated, also.
--
Ticket URL: <http://code.djangoproject.com/ticket/9749>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---