17

I am trying to change the field order in the admin of a field in a django package (rest framework)

I define a new adminmanager, but get a 'Model Already Registered' Error. Surely there must be a way to do it?

from rest_framework.authtoken.models import Token
class AuthTokenAdmin(admin.ModelAdmin):
    list_display = ('user', 'key',)


admin.site.register(Token, AuthTokenAdmin)
dowjones123
  • 3,695
  • 5
  • 40
  • 83

1 Answers1

24

The reason this error occurs is, the class Token has already been registered with an admin class like this:

from django.contrib import admin
from rest_framework.authtoken.models import Token


class TokenAdmin(admin.ModelAdmin):
    list_display = ('key', 'user', 'created')
    fields = ('user',)
    ordering = ('-created',)


admin.site.register(Token, TokenAdmin)

To change this, you first need to unregister the old admin registration against the given class, and then register the new one.

Try this:

admin.site.unregister(Token) #First unregister the old class
admin.site.register(Token, AuthTokenAdmin) #Then register the new class
karthikr
  • 97,368
  • 26
  • 197
  • 188
  • 4
    I end up in some wired loop: without: `admin.site.unregister(Token)` I got `The model Token is already registered ` with I got `The model Token is not registered`. I am using django dashboard, where I register: 'rest_framework.authtoken.Token', – andilabs May 28 '15 at 12:18
  • 8
    Hi @andi your problem could be the order of the apps in the `INSTALLED_APPS` setting. Keep your custom apps below third party apps so that `unregister` is called on an already registered model. – manu Jan 28 '16 at 22:06