Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you register multiple ModelAdmins for a Model? Alternatives?

Say I have the Django model class:

class Foo(models.Model):
 bar = models.CharField()
 baz = models.CharField()

and the ModelAdmins:

class Foo_Admin_1(admin.ModelAdmin):
 list_display = ['id','bar']

class Foo_Admin_2(admin.ModelAdmin):
 list_display = ['id','baz']

is there any way to register both ModelAdmins so that they show up under the Django Admin interface?

I tried:

admin.site.register(Foo,Foo_Admin_1)
admin.site.register(Foo,Foo_Admin_2)

but I get the error:

The model Foo is already registered

Any suggestions?

If not, are there alternative ways to (dynamically) control the fields shown in the ModelAdmin change list view?

like image 634
Tom Neyland Avatar asked Jan 17 '11 19:01

Tom Neyland


1 Answers

Create an empty proxy subclass and register it instead:

class Foo(models.Model):
    bar = models.CharField()
    baz = models.CharField()

# admin.py
class FooProxy(Foo):
    class Meta:
        proxy=True

admin.site.register(Foo, FooAdmin1)
admin.site.register(FooProxy, FooAdmin2) 
like image 151
Mikhail Korobov Avatar answered Sep 26 '22 07:09

Mikhail Korobov