我正在尝试扩展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'>
有人可以提供任何指示吗?
答案 0 :(得分: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 docs还有一些细节。