id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux
16693 Unregistering ModelAdmin view and registering it again changing its contents is not realized when invoking it. heidar_rafn nobody "When trying to make a change to the list_per_page option of a ModelAdmin class instance,
it seems that the change is not activated on the fly.
I first ""unregister"" the old ModelAdmin class and then ""register"" a new one (which is actually created)
but when trying to invoke the view, the old one is used, it looks like it is cached somewhere and the url-mechanism
is not using the re-created view, but invokes the old one.
After some investigation, I managed to create a work around that demonstrates what might be a bug,
see the code snippets, especially the ""changelist_view"" function - if it is omitted,
the behavior I am describing happens.
Here are code snippets that demonstrate this:
{{{
# settings.py
...
FLIGHTADMININSTANCE = None
...
}}}
{{{
# myapp/admin.py
...
from django.conf import settings
from myapp.models import ConfigParameters
...
class FlightAdmin(admin.ModelAdmin):
try:
list_per_page = int(ConfigParameters.objects.get(name=""FLIGHTADMIN_LIST_PER_PAGE"").value)
except:
list_per_page = 5;
...
def __init__(self, *args, **kwargs):
super(FlightAdmin, self).__init__(*args, **kwargs)
# store globally the object instance pointer
settings.FLIGHTADMININSTANCE = self
# following debug shows that the list_per_page is really changed
print ""FlightAdmin created"", self, self.list_per_page
def changelist_view(self, request, extra_context=None, **kwargs):
# NOTE: following is to override some probably cached instance of the view
# and enables the changed view to be used instead of the first instance created
# of the FlightAdmin class if this hook is not used
return super(FlightAdmin, settings.FLIGHTADMININSTANCE).changelist_view(request, extra_context=extra_context)
...
admin.site.register(Flight, FlightAdmin)
...
def list_per_page_change(sender, instance, created, **kwargs):
if instance.name == 'FLIGHTADMIN_LIST_PER_PAGE':
# yes - the value is changing, change the FlightAdmin class accordingly
admin.site.unregister(Flight)
try:
admin.site.register(Flight, FlightAdmin, list_per_page=int(instance.value))
except:
admin.site.register(Flight, FlightAdmin)
post_save.connect (list_per_page_change, sender=ConfigParameters)
}}}
" Bug closed contrib.admin 1.3 Normal invalid Unreviewed 0 0 0 0 0 0