Using proxy model in django admin to customize change list view

django, django-admin, django-models, python

Solution

You can specify the queryset in the model admin:

class ChangeAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        return Change.objects.exclude(status='closed')

class ClosedChangeAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        return ClosedChange.objects.filter(status='closed')

admin.site.register(Change, ChangeAdmin)
admin.site.register(ClosedChange, ClosedChangeAdmin)

Problem

I have a model which looks like this : ``` class Change(models.Model): Reference = models.CharField(max_length=100) Choices = ((1,"Pending"),(2,"In Progress",),(3,"Closed")) Status = models.SmallIntegerField(choices=Choices, default=1, max_length=1) ``` Since it is not possible to register another Change model,I am using a proxy model called ClosedChange as follows : ``` class ClosedChange(Change): class Meta: proxy = True verbose_name = u"Closed Changes" ``` What i want to achieve is that whenever any user changes the status of a change to Closed,it should disappear from the change list view of Change and appear in the change list view of ClosedChange and vice versa. How do i achieve this ??

Original source