Python django同一型号的两个外键-管理错误

Python django同一型号的两个外键-管理错误,python,django,Python,Django,我有一个Profiles应用程序,它有一个名为profile的模型,我使用该模型来扩展django内置的用户模型,而无需对其进行子类化 型号.py class BaseProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='owner',primary_key=True) supervisor = models.ForeignKey(settings.AU

我有一个Profiles应用程序,它有一个名为profile的模型,我使用该模型来扩展django内置的用户模型,而无需对其进行子类化

型号.py

class BaseProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='owner',primary_key=True)
    supervisor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='supervisor', null=True, blank=True)

@python_2_unicode_compatible
class Profile(BaseProfile):
    def __str__(self):
        return "{}'s profile". format(self.user)
class UserProfileInline(admin.StackedInline):
    model = Profile

class NewUserAdmin(NamedUserAdmin):
    inlines = [UserProfileInline ]

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

class BaseProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='owner',primary_key=True)
    supervisor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='supervisor', null=True, blank=True)

@python_2_unicode_compatible
class Profile(BaseProfile):
    def __str__(self):
        return "{}'s profile". format(self.user)
class UserProfileInline(admin.StackedInline):
    model = Profile

class NewUserAdmin(NamedUserAdmin):
    inlines = [UserProfileInline ]

admin.site.unregister(User)
admin.site.register(User, NewUserAdmin)
管理员

错误为

<class 'profiles.admin.UserProfileInline'>: (admin.E202) 'profiles.Profile' has more than one ForeignKey to 'authtools.User'.
:(admin.E202)“profiles.Profile”有多个指向“authtools.User”的外键。

显然,我想选择一个用户作为另一个用户的主管。我认为模型中的关系还可以,抱怨的是admins.py文件。有什么想法吗?

这是一个我刚刚测试过的工作示例

class Task(models.Model):
    owner = models.ForeignKey(User, related_name='task_owner')
    assignee = models.ForeignKey(User, related_name='task_assigned_to')
在admin.py中

class TaskInLine(admin.TabularInLine):
    model = User

@admin.register(Task)
class MyModelAdmin(admin.ModelAdmin):
    list_display = ['owner', 'assignee']
    inlines = [TaskInLine]

您需要使用多个内联管理

当一个模型具有多个指向同一父模型的ForeignKey时,需要在内联管理中指定
fk_name
属性:

class UserProfileInline(admin.StackedInline):
    model = Profile
    fk_name = "user"

class SupervisorProfileInline(admin.StackedInline):
    model = Profile
    fk_name = "supervisor"

class NewUserAdmin(NamedUserAdmin):
    inlines = [UserProfileInline, SupervisorProfileInline]

Django提供了一些处理此问题的文档:

将相关的名称添加到UserThreaded,但它不起作用我已经制作了一个类似的示例,它确实起作用了,我的问题是管理界面和error@Bob哈基姆的问题恰恰相反。在您的示例中,您将无法创建一个UserAdmin和一个model Task的内联管理员。fk_name='user'在UserProfileInline中为我解决了这个问题,我不需要添加另一个SupervisorProfileInline,因为我只需要一个下拉列表来显示所有用户,我选择一个作为管理员…谢谢