扩展Django用户模型:外键错误

2 投票
1 回答
715 浏览
提问于 2025-04-17 14:43

我想在Django的用户模型中添加一个新的字段。根据文档的说明,我已经这样扩展了字段:

   class Employee(models.Model):
    # This field is required.
    user = models.OneToOneField(User)
    manager_id = models.ForeignKey(User, related_name='employees')

我希望manager_id能够自我引用,也就是说它可以关联到一个用户,而不是新建一个经理表,并且我想在普通用户页面上显示这个新字段。为此,按照文档的指示,我还添加了以下内容:

class EmployeeInline(admin.StackedInline):
    model = Employee
    can_delete = False
    verbose_name_plural = 'employee'

# Define a new User admin
class UserAdmin(UserAdmin):
    inlines = (EmployeeInline, )

# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

但是,我遇到了以下异常:

<class 'dhtmlScheduler.models.Employee'> has more than 1 ForeignKey to <class 'django.contrib.auth.models.User'>

有没有人能给我一些建议?

1 个回答

3

如果你真的想让 manager_id 自我引用,也就是指向自己,那么Aamir在你问题下的评论就是正确的做法。

如果你希望 manager_id 指向 User 模型,就像你示例代码中那样,你需要告诉 EmployeeInline 应该使用哪个外键。

可以这样做:

class EmployeeInline(admin.StackedInline):
    model = Employee
    can_delete = False
    verbose_name_plural = 'employee'
    fk_name = 'manager_id'

这样一来,就能在用户的管理页面上显示该用户的员工。有关更多细节,可以查看Django文档

撰写回答