Multiple ModelAdmins/views for same model in Django admin Multiple ModelAdmins/views for same model in Django admin django django

Multiple ModelAdmins/views for same model in Django admin


I've found one way to achieve what I want, by using proxy models to get around the fact that each model may be registered only once.

class PostAdmin(admin.ModelAdmin):    list_display = ('title', 'pubdate','user')class MyPost(Post):    class Meta:        proxy = Trueclass MyPostAdmin(PostAdmin):    def get_queryset(self, request):        return self.model.objects.filter(user = request.user)admin.site.register(Post, PostAdmin)admin.site.register(MyPost, MyPostAdmin)

Then the default PostAdmin would be accessible at /admin/myapp/post and the list of posts owned by the user would be at /admin/myapp/myposts.

After looking at http://code.djangoproject.com/wiki/DynamicModels, I've come up with the following function utility function to do the same thing:

def create_modeladmin(modeladmin, model, name = None):    class  Meta:        proxy = True        app_label = model._meta.app_label    attrs = {'__module__': '', 'Meta': Meta}    newmodel = type(name, (model,), attrs)    admin.site.register(newmodel, modeladmin)    return modeladmin

This can be used as follows:

class MyPostAdmin(PostAdmin):    def get_queryset(self, request):        return self.model.objects.filter(user = request.user)create_modeladmin(MyPostAdmin, name='my-posts', model=Post)


Paul Stone answer is absolutely great! Just to add, for Django 1.4.5 I needed to inherit my custom class from admin.ModelAdmin

class MyPostAdmin(admin.ModelAdmin):    def queryset(self, request):        return self.model.objects.filter(id=1)