2012-10-18 9 views
6

Ho visto un sacco di domande il contrario, che hanno qualcosa lungo le seguenti:In Django amministrazione, includono auth.User come un inline

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    can_delete = False 
    verbose_name_plural = 'profile' 

class NewUserAdmin(UserAdmin): 
    inlines = (UserProfileInline,) 

admin.site.unregister(User) 
admin.site.register(User, NewUserAdmin) 

Quello che voglio fare è il contrario, ma Non riesco a vederlo funzionare. Ecco il codice che ho che non funziona.

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 
from myapp.models import SpecialUserType 

class UserInline(admin.StackedInline): 
    model = User 
    can_delete = False 

class IncludeUserAdmin(admin.ModelAdmin): 
    inlines = (UserInline,) 

admin.register(SpecialUserType, IncludeUserAdmin) 

Come posso fare questo lavoro in modo che User è una linea in Admin SpecialUserType?

L'errore che sto ricevendo è:

<class 'django.contrib.auth.models.User'> has no ForeignKey to <class 'students.models.SpecialUserType'> 

Questo ha senso, perché il OneToOneField è ospitato nel modello SpecialUserType, ovviamente, e non in User. Ma come posso farlo invertire su OneToOneField?

(so che questo potrebbe sembrare una cosa insolita da fare, ma c'è una buona ragione che voglio installare l'amministratore in questo modo e non il contrario.)

+0

Quale versione di Django stai usando? – sepulchered

+0

Non potrebbe funzionare per la sottoclasse del modello User per aggiungerlo alla relazione mancante? – Ambroise

risposta

1

Purtroppo non può essere fatto. Ho incontrato il problema prima di me stesso alcune volte.

Come dice il messaggio di errore, il modello in linea deve avere un ForeignKey (o OneToOneField) che punta al modello principale.

Come altri hanno detto, ho trovato sottoclassi utente molto utile per me:

class UserProfile(User): 
    user = OneToOneField(User, parent_link=True) 
    # more fields, etc 
+0

Quando inizialmente veniva posta questa domanda, la sottoclasse di 'User' non era un'opzione. Fortunatamente, ora lo è. – jdotjdot

+0

credici o meno, ma ho sottoclasse Utente da marzo 2010, solo senza AUTH_USER_MODEL. –

Problemi correlati