2

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

誰かが何か指針を提供できますか?

4

1 に答える 1

3

本当に自己参照的になりたい場合manager_idは、質問に対するAamirのコメントが最適です。

サンプルコードのようにモデルmanager_idへの参照になりたい場合は、使用する外部キーを に伝える必要があります。UserEmployeeInline

このような:

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

これにより、ユーザーの従業員が管理ページに表示されます。Djangoのドキュメントには、さらにいくつかの詳細があります。

于 2013-02-04T17:25:51.457 に答える