如何根据模型中的值添加在 django admin 中编辑自己的权限?

How to add permissions to edit own in django admin based on value in model?

我有一个关于 Django-Admin 的问题。我的 Django 管理员中的每个项目都有 "EngagementManager" 字段,其中包含人名。当您登录 Django 时,您的用户名与我之前提到的字段相同。

我需要实现登录用户可以 change/edit 只有字段 "EngagementManager" 与登录用户匹配的项目的功能。有人可以给我提供一段代码和一些小指南吗?

Django Admin 仅适用于受信任的管理员和内容编辑者,不适用于普通用户。

如果您需要限制用户只能查看他们自己的内容,那么您应该自己构建。

Django Admin 并非用于该目的

只有当用户对数据库中的所有内容具有完全访问权限时,才应使用 Django Admin。他们可以编辑的内容可以受到限制,但通常他们可以看到的内容不应该受到限制。

就只允许访问某些数据位而言,它并不打算允许太多。建议您为此目的构建一个自定义前端,这样很容易进行此类限制。

这种限制在viewstemplates中很容易。使用 request.user.

我现在正在 phone,但如果您愿意,我可以 post 一些示例代码来执行此操作。只需在下面评论。

这些是我使用的 updateprofile 方法的样本。

这里的核心概念是发送到表单的唯一数据是当前登录帐户的用户的数据。您可能想要实现这样的功能。

views.py 检查正确的用户

@login_required(login_url='/login')
def update_profile(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            return redirect('/accounts/{}'.format(request.user.username), request.user.username)
        else:
            print("Something broke")
    else:
        user_form = UserForm(instance=request.user) #grabbing the data from that specific user, making sure that is all that is passed. 
    return render(request, 'profile_update.html', {
        'user_form': user_form,
    })

在模板中,if 语句检查页面的用户是否是登录帐户的所有者(并检查他们是否已访问他们的帐户),如果是,则向他们显示信息。

用于检查正确用户的模板代码

    {% if page_username == user.username and user.is_authenticated %}
<p>Whatever content you wanted to show to the user who owned the page and was logged in.</p>

{% else %}
<p>Whatever you want to say to users who are not authorized to view the data on the page, if anything.</p>

{% endif %}