【问题标题】:Separate permissions for records in a table in Django AdminDjango Admin中表中记录的单独权限
【发布时间】:2019-08-28 07:10:32
【问题描述】:

假设我的 Django 项目中有不同的用户和一个模型,每个记录都属于某个用户。用户应该有权访问管理面板。

class MyModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ...

在 Django 中是否有一种标准方法可以创建任何用户列表,在管理面板中只创建和编辑他的 MyModel 实例,隐藏其他用户创建的实例?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您可以覆盖模型管理员的查询集。像这样:

    class MyModelAdmin(admin.ModelAdmin):
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            qs = qs.filter(user=request.user)
            return qs
    

    这将根据他们所属的用户过滤掉实例。

    【讨论】:

    • 如果一个用户试图编辑另一个用户的实例,像这样直接在 URL 中插入 id:my.proj/admin/myapp/mymodel/4168198/change 怎么办?我认为,应该有一个检查来访问这个页面并保存模型。能否请您改进您的答案?
    • 请让我验证一下。
    • @Fomalhaut 没有其他用户不能访问这样的任何实例。他会出错。因为获取对象的方法也从get_queryset(被覆盖)获取它的查询集。
    • 感谢您查看此问题。
    猜你喜欢
    • 2014-01-10
    • 2017-12-26
    • 1970-01-01
    • 2015-02-21
    • 2014-06-18
    • 2014-10-20
    • 2018-03-04
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多