Skip to main content
 首页 » 编程设计

python之django 两个外键到同一模型之管理错误

2025年05月04日32tuyile006

我有一个 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) 

admin.py

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'. 

显然我想选择一个用户作为另一个用户的主管。我认为模型中的关系没问题,提示的是 admins.py 文件。有什么想法吗?

请您参考如下方法:

您需要使用多个内联管理员。

当您的模型有多个指向同一父模型的外键时,您需要在内联管理中指定 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 有一些关于处理这个问题的文档:https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model