Django管理员:仅显示相应用户的记录
我有一个简单的模型,比如说参考资料。我只有不到20个用户,model admin负责记录请求 问题是所有用户都可以在模型管理站点中看到所有记录 是否可以将此行为更改为仅显示由同一用户创建的记录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
感谢您的期待。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用户。。