管理员中的Django OneToOne字段

时间:2013-10-25 07:06:22

标签: python django

以下是Django中的模型:

class Member(models.Model):
    user     = models.OneToOneField(User)
    moredata = models.CharField('More data', max_length=255)

我想将所有用户字段放在Django管理员中该模型的编辑/创建页面中。所以我这样做了:

class UserInline(admin.StackedInline):
    model = User

class MemberAdmin(admin.ModelAdmin):
    inlines = [
        UserInline,
    ]

admin.site.register(Member, MemberAdmin)

但是Django说User上没有外键,这是完全正确的。有办法解决这个问题吗?

如果我不使用admin类,我得到的只是一个用户列表。

理想情况下,我希望User类型对管理员不可见,并让他们只创建和编辑派生的用户类型。

我应该扩展实际的User类型而不是OneToOne关系吗?

1 个答案:

答案 0 :(得分:1)

正如我们在聊天中讨论的那样,内置的User对象旨在用于管理站点。但在你的情况下,它对你的模型来说是无关紧要的,只会增加局限性和复杂性。

在这种情况下,最好的方法是使用您自己的模型作为独立的用户类,并使用内置的用户管理员(或根本不使用)。为此,您需要继承AbstractBaseUser并按照此处的说明进行操作:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#specifying-a-custom-user-model

它非常详细,如果你遇到任何麻烦,请回到这里,有人肯定会帮助你