Django管理员:仅显示相应用户的记录

Django管理员:仅显示相应用户的记录,django,django-models,django-admin,django-queryset,Django,Django Models,Django Admin,Django Queryset,我有一个简单的模型,比如说参考资料。我只有不到20个用户,model admin负责记录请求 问题是所有用户都可以在模型管理站点中看到所有记录 是否可以将此行为更改为仅显示由同一用户创建的记录 感谢您的期待。django doc提供了一个几乎完全符合您要求的示例: 其思想是覆盖模型管理视图中的get\u queryset()方法: # admin.py from django.contrib import admin class YourModelAdmin(admin.ModelAdmin

我有一个简单的模型,比如说参考资料。我只有不到20个用户,model admin负责记录请求

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

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


感谢您的期待。

django doc提供了一个几乎完全符合您要求的示例:

其思想是覆盖模型管理视图中的
get\u 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)

您可以根据需要调整queryset筛选器。

更新2020: 任何想知道作者字段是什么的人,都可以在应用程序的
models.py
文件中找到作者字段。对于
admin.py
部分,您可以访问

第1步:

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

第二步:

管理员

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)

这就是管理网站的重点,超级用户可以看到任何东西。如果您希望每个用户只看到特定的项目,那么我建议您为此创建一个单独的模板。这是否适用于您的用例?谢谢,您的意思是说-使用queryset创建视图以按用户过滤,然后呈现模板?我可以这样做,可能需要2-3天,因为我是初学者。我想如果管理员站点可以有这个功能,你可以使用一个基于类的通用ListView视图,并覆盖提供的
get\u queryset()
方法()。然后在模板中,只需迭代上下文数据,并根据需要在模板中显示它们。看起来像是高级主题,谢谢。我会试试的。我想我的模型是否可以覆盖get_queryset方法(或类似方法)来过滤loggedon用户。。