【发布时间】:2012-03-16 17:08:06
【问题描述】:
我是 Django 新手。我正在开发一个仅包含员工用户的网站。我是管理员。我的计划是注册一个用户并给他他的用户名和密码来登录;我希望他仅能够编辑他的个人资料以添加更多信息,而不是更改现有属性。我该怎么做?
【问题讨论】:
标签: django django-admin django-profiles
我是 Django 新手。我正在开发一个仅包含员工用户的网站。我是管理员。我的计划是注册一个用户并给他他的用户名和密码来登录;我希望他仅能够编辑他的个人资料以添加更多信息,而不是更改现有属性。我该怎么做?
【问题讨论】:
标签: django django-admin django-profiles
最简单的方法可能是创建一个适当的 ModelForm 和一个相应的视图,检查用户想要更新的实例是自己的实例。
我想直接在后台集成这个,你也可以这样做。最 djangoish 的方法可能是为 User 创建一个自己的 ModelAdmin 类,该类覆盖了正确的方法(请参阅方法 startinghere)。我认为您应该从覆盖 has_change_permission 开始,您可以在其中检查用户尝试编辑的对象是否是他自己的,否则返回 False。
要替换标准的 User ModelAdmin,您需要在 admin.py 中做一些修改:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
# add the code here
# deregister the standard AdminModel and register the own one
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
(我在一个实时站点上使用此代码并且它可以创建)
【讨论】: