Django admin:仅显示各个用户的记录

Posted

技术标签:

【中文标题】Django admin:仅显示各个用户的记录【英文标题】:Django admin : show records for respective user only 【发布时间】:2017-10-24 23:09:39 【问题描述】:

我有一个简单的模型,比如 Resources。而且我的用户不到 20 个,模型管理员的目的是记录请求。

问题是所有用户都可以看到模型管理站点中的所有记录。

可以将此行为更改为仅显示同一用户创建的记录吗?

谢谢你的期待。

【问题讨论】:

这就是管理站点的重点,超级用户可以看到任何内容。如果您希望每个用户只看到特定项目,那么我建议您为此创建一个单独的模板。这是否适用于您的用例? 谢谢,您的意思是说 - 使用查询集创建视图以按用户过滤然后呈现模板?我可以做到,因为我是初学者,可能需要 2-3 天。我想如果管理网站可以有这个功能。 您可以使用基于类的通用 ListView 视图并覆盖提供的 get_queryset() 方法 (docs.djangoproject.com/en/1.11/ref/class-based-views/…)。然后在模板中,只需迭代上下文数据并根据需要将它们呈现在您的模板中。 看起来像高级主题,谢谢。我会试试的。 考虑是否可以覆盖 get_queryset 方法(或类似方法)以使我的模型仅过滤登录用户.. 【参考方案1】:

django 文档有一个几乎完全符合您要求的示例:

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

想法是在模型管理视图中覆盖get_queryset() 方法:

# admin.py
from django.contrib import admin

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

admin.site.register(YourModel, YourModelAdmin)

您可以随意调整查询集过滤器以适应更具体的需求。

【讨论】:

【参考方案2】:

2020 年更新: 任何对作者字段是什么感到好奇的人都可以在您的应用程序的models.py 文件中建立。对于admin.py部分,您可以访问docs。

第 1 步:

确保在您的权限中授予对您希望用户拥有 CRUD 功能的应用程序的访问权限。

第 2 步:

Admin.py

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

模型.py

from django.contrib.auth import get_user_model

class Lecture(models.Model):
    author = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)

【讨论】:

以上是关于Django admin:仅显示各个用户的记录的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin:如何过滤特定范围值的整数字段

Django-Admin 面板不会显示插入的记录抛出 phpmyadmin?

我可以在 django admin 中制作 list_filter 以仅显示引用的 ForeignKeys 吗?

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

django admin编辑被外键关联的主表时支持显示字表记录

Django admin - 在显示的用户列表中添加一个字段