2012-10-18 17 views
6

Ich habe viele Fragen andersrum gesehen, die etwas in der folgenden haben:In Django admin, umfassen auth.User als 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) 

Was ich will ist das Gegenteil zu tun, aber Ich kann nicht sehen, dass es funktioniert. Hier ist der Code, den ich habe, der nicht funktioniert.

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) 

Wie kann ich diese Arbeit zu machen, so dass User ein Inline im Admin von SpecialUserType ist?

Der Fehler, ich bin immer ist:

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

Dies macht Sinn, weil die OneToOneField im SpecialUserType Modell untergebracht ist, offensichtlich und nicht in User. Aber wie kann ich es auf dem OneToOneField rückgängig machen?

(Ich weiß, das könnte eine ungewöhnliche Sache scheint, zu tun, aber es gibt einen guten Grund, dass ich den Admin auf diese Weise und nicht umgekehrt. Einrichten mag)

+0

Welche Version von Django verwenden Sie? – sepulchered

+0

Würde es nicht funktionieren, wenn Sie das Benutzermodell ableiten, um die fehlende Beziehung hinzuzufügen? – Ambroise

Antwort

1

Leider kann es nicht sein, erledigt. Ich habe das Problem ein paar Mal vor mir selbst erlebt.

Wie die Fehlermeldung besagt, muss das Inline-Modell einen ForeignKey (oder OneToOneField) aufweisen, der auf das Hauptmodell verweist.

Wie andere erwähnt haben, habe ich Subklassifizieren Benutzer sehr hilfreich für mich gefunden:

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

Wenn diese Frage ursprünglich gestellt wurde, war das Unterklassen 'User' keine Option. Zum Glück ist es jetzt. – jdotjdot

+0

glauben Sie es oder nicht, aber ich habe Benutzer seit März 2010, ohne AUTH_USER_MODEL subclassing. –

Verwandte Themen