如何从扩展用户模型中仅编辑django admin中的某些字段?

时间:2014-11-16 18:09:05

标签: django django-admin

在寻找扩展用户的最佳方式后,我按照此处描述的方式(https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model)。现在我正在寻找一种方法让用户从User(例如first_name,last_name和email)以及扩展的新类中编辑他们的一些字段。如果这可以在同一个屏幕上完成会很好,但我不确定这是否可行(我不想让非超级用户可以编辑权限)。

所以,我首先在admin中尝试了这段代码,但它不起作用:

#admin.py
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User


class MyUserAdmin(UserAdmin):
    def get_fieldsets(self, request, obj=None):
        if request.user.is_superuser:
            fieldsets = super(MyUserAdmin, self).get_fieldsets(request, obj)
        else:
            fieldsets = (
                (None, {
                    'fields': ('username', 'first_name', 'last_name', 'email', 'password', 'last_login', 'date_joined',)
                }),)
        return fieldsets

    # If not superuser, do not show some fields
    def get_readonly_fields(self, request, obj=None):
        ro_fields = super(MyUserAdmin, self).get_readonly_fields(request, obj)
        if not request.user.is_superuser:
            ro_fields = list(ro_fields) + ['username', 'last_login', 'date_joined',]
        return ro_fields

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

这是我模特的一部分:

class Investigator(models.Model):
    user = models.OneToOneField(User, verbose_name=_('User'))
    force_password_change = models.BooleanField(_('Force password change'), default=True)
    ...

我没有错误,但更改未保存。我必须做些什么才能让用户编辑某些特定字段?

1 个答案:

答案 0 :(得分:0)

您需要为用户设置编辑用户模型的权限 enter image description here