【问题标题】:How to edit only some fields in django admin from an extend user model?如何从扩展用户模型中仅编辑 django admin 中的某些字段?
【发布时间】:2014-11-16 18:09:05
【问题描述】:

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

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

#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.6 或 1.7 就足够了
  • 您的扩展型号名称是什么?你在扩展 django User 模型吗?
  • Doniyor,1.7 中的文档也这么说:docs.djangoproject.com/en/1.7/topics/auth/customizing/…
  • 哈桑,是的。我编辑了我的问题并添加了我的模型。

标签: django django-admin


【解决方案1】:

您需要为用户设置权限才能编辑用户模型

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2016-12-16
    • 2014-07-10
    • 1970-01-01
    • 2012-05-07
    • 2016-11-09
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多