首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django modelAdmin显示标题

django modelAdmin显示标题
EN

Stack Overflow用户
提问于 2018-07-17 10:59:06
回答 1查看 1.3K关注 0票数 1

我对django很陌生。我有以下代码:

模型:

代码语言:javascript
复制
class MyUser(AbstractUser):
    profile = models.OneToOneField(Profile, null=True, on_delete=models.PROTECT)

我的个人资料模型只包含一些个人字段,如full_name、性别、生日等。

行政:

代码语言:javascript
复制
class MyUserInline(admin.StackedInline):
    model = MyUser
    exclude = ('first_name', 'last_name', 'username', 'plan', 'password')
    fieldsets = (
        (_('Personal info'), {'fields': ('email',)}),
        (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                       'groups', 'user_permissions')}),
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )


class MyUserChangeForm(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = MyUser

    def clean_password(self):
        return ""

class ProfileAdmin(admin.ModelAdmin):
    inlines = (MyUserInline,)
    change_user_password_template = None
    form = MyUserChangeForm
    change_password_form = AdminPasswordChangeForm
    ordering = ('myuser__email',)

    def save_model(self, request, obj, form, change):
        obj.myuser.username = obj.myuser.email
        obj.save()

    list_display = ('full_name', 'myuser_email', 'myuser_is_staff', 'myuser_is_superuser', 'myuser_is_active')

    def user_change_password(self, request, id, form_url=''):
    if not self.has_change_permission(request):
        raise PermissionDenied
    user = self.get_object(request, unquote(id))
    if user is None:
        raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {
            'name': force_text(self.model._meta.verbose_name),
            'key': escape(id),
        })
    if request.method == 'POST':
        form = self.change_password_form(user, request.POST)
        if form.is_valid():
            form.save()
            # rest of method

    # other minor methods 

问题是:

  1. 在最近的操作或编辑用户后,我看到配置文件对象,而不是用户名或电子邮件。在这里输入图像描述
  2. 见此处:我的另一个问题
  3. 在“配置文件编辑”页中,权限部分只包含一个包含所有可能权限列表的框,但是必须有另一个包含用户当前权限列表的框。

现在的样子:在这里输入图像描述

它必须是什么样子:在这里输入图像描述

tnx

更新

对于第二个问题(更改密码),我在Profile模型中添加了以下行:

代码语言:javascript
复制
def set_password(self, raw_password):
    self.myuser.password = make_password(raw_password)
    self.myuser._password = raw_password

调试时,raw_password是我在表单中插入的正确内容,从第一行开始运行后,self.myuser.password具有新的值,但是新的值没有提交到DB中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 11:10:22

点1

在您的__unicode__模型中定义一个Profile__str__ (根据您的python )方法,返回您想要显示的内容。

点3

可以将以下行添加到ProfileAdmin

代码语言:javascript
复制
filter_horizontal = ['user_permissions']

生成一个很好的两列过滤字段,如您的图像所示。见文档

您还可以直接使用来自django.contrib.admin.widgets的小部件django.contrib.admin.widgets

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51379723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档