对于 django 管理员,如何向用户模型添加字段并使其在管理员中可编辑?

2024-01-02

我试图更好地理解 django 管理,同时,我试图向当前用户管理添加一个字段。在 models.py 中我已经完成了

User.add_to_class('new_field', models.BooleanField(default=False))

在 admin.py 中我有以下内容(字段集基本上只是从 django/contrib/auth/admin.py 复制的)

class AdjUserAdmin(UserAdmin):
  list_display  = UserAdmin.list_display + ('new_field',)
  list_filter   = UserAdmin.list_filter + ('new_field',)

  fieldsets = UserAdmin.fieldsets
  fieldsets[1][1]['fields'] = ('first_name','last_name','email','new_field')

问题是,当我这样做时,我收到错误:

AdjUserAdmin.fieldsets[4][1]['fields']' refers to field 'new_field' that is missing from the form.

我查看了 UserChangeForm,但看起来它已经正确地将 User 作为模型拉入。我不确定为什么new_field表格中缺失。

Thanks

关于这个臭代码

我知道这是一种臭猴子修补方法来执行此操作,但子类化给我带来的问题主要是these http://www.b-list.org/weblog/2007/feb/20/about-model-subclassing/原因..如果我能让它按照上述方式工作,我会很高兴..也许会发臭。

关于推荐的方式

我知道创建用户配置文件的推荐方法,只是在特定情况下,当我想要存储的只是额外的数据时,我看不到创建整个新表并额外调用数据库的优点一些信息,例如is_private或一些这样的。如果我要存储更多信息,那么我同意,设置用户配置文件是更好的选择。


首先是“是否已插入?”问题 -- 您是否手动将 new_field 添加到数据库中的 users 表中?当然,Syncdb 不会处理这个问题。

之后,我会尝试将字段附加到现有的 UserAdmin 上,而不是从头开始重建它:

from django.contrib.auth.admin import UserAdmin

UserAdmin.list_display += ('new_field',)  # don't forget the commas
UserAdmin.list_filter += ('new_field',)
UserAdmin.fieldsets += ('new_field',)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于 django 管理员,如何向用户模型添加字段并使其在管理员中可编辑? 的相关文章

随机推荐