【问题标题】:In Django admin, include auth.User as an inline在 Django admin 中,包含 auth.User 作为内联
【发布时间】:2012-10-18 16:05:17
【问题描述】:

我看到了很多相反的问题,其中有以下内容:

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)

我想做的是相反的,但我看不到让它工作。这是我的代码不起作用。

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)

我怎样才能使这项工作使User 成为SpecialUserType 管理员的内联?

我得到的错误是:

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

这是有道理的,因为OneToOneField 位于SpecialUserType 模型中,显然不是在User 中。但是我怎样才能让它在OneToOneField 上反转呢?

(我知道这似乎是一件不寻常的事情,但我有充分的理由希望以这种方式设置管理员,而不是相反。)

【问题讨论】:

  • 你使用的是什么版本的 Django?
  • 对 User 模型进行子类化以添加缺失的关系对您来说不起作用吗?

标签: python django django-models django-admin


【解决方案1】:

不幸的是,它无法完成。我之前遇到过几次这个问题。

正如错误消息所说,内联模型必须有一个指向主模型的 ForeignKey(或 OneToOneField)。

正如其他人所提到的,我发现子类化 User 对我非常有帮助:

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

【讨论】:

  • 最初提出这个问题时,子类化User 不是一个选项。幸运的是,现在是。
  • 信不信由你,但我从 2010 年 3 月开始对 User 进行子类化,只是没有 AUTH_USER_MODEL。
猜你喜欢
  • 2016-06-30
  • 2011-02-23
  • 2012-04-13
  • 1970-01-01
  • 2023-03-20
  • 2020-04-16
  • 2011-08-09
  • 2013-03-17
  • 1970-01-01
相关资源
最近更新 更多