Sil*_*eed 9 django django-admin
我试图更好地理解django管理员,同时,我正在尝试向当前用户管理员添加一个字段.在models.py我做过
User.add_to_class('new_field', models.BooleanField(default=False))
Run Code Online (Sandbox Code Playgroud)
在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')
Run Code Online (Sandbox Code Playgroud)
问题是,当我这样做时,我得到错误:
AdjUserAdmin.fieldsets[4][1]['fields']' refers to field 'new_field' that is missing from the form.
我看过UserChangeForm,但看起来它已经正确地将User作为模型.我不确定new_field表格中缺少原因.
谢谢
关于这是臭臭的代码
我知道这是一个臭臭的猴子修补方式去做这个,但是子类化给我的问题主要是出于这些原因..如果我能按照上面说明的方式让它工作,我会很开心..也许很臭.
关于推荐的方式
我所知道的创建用户配置文件的推荐方式,只是在特定情况下,我看不到的优点创造一个全新的表,具有附加调用数据库的时候我要的存储是一个额外的一些信息,如is_private某些信息.如果我存储更多信息,那么我同意,建立用户配置文件更可取.
ans*_*ung 19
首先是"插入电源吗?" 问题 - 您是否手动将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',)
Run Code Online (Sandbox Code Playgroud)
刚刚弄清楚这一点,也许这也可以帮助你。
由于您没有提及您有单独的个人资料,因此如果您只想向现有用户管理添加一列,则可以在中执行以下操作admin.py:
首先,您通过子类化创建自定义管理员UserAdmin:
class CustomUserAdmin(UserAdmin):
list_display = UserAdmin.list_display + ('is_complete',)
def is_complete(self, obj):
# Example here, you can use any expression.
return SomeOtherClass.objects.get(my_field=obj).is_complete()
# Not required, but this gives you a nice boolean field:
is_complete.boolean = True
Run Code Online (Sandbox Code Playgroud)
然后取消注册现有的UserAdmin并注册您自己的:
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14808 次 |
| 最近记录: |