Django admin:仅显示相应用户的记录

时间:2017-05-24 14:23:47

标签: django django-models django-admin django-queryset

我有一个简单的模型,比如资源。我只有不到20个用户,而模型管理员用于记录请求。

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

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

感谢您的期待。

2 个答案:

答案 0 :(得分:7)

django doc有一个几乎完全符合你想要的例子:

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)

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

答案 1 :(得分:0)

UPDATE 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)

Models.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)