【问题标题】:allow users view own objects in django admin允许用户在 django admin 中查看自己的对象
【发布时间】:2021-05-14 06:30:38
【问题描述】:

我想让用户访问管理面板

我有一张桌子:


class Todo(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    date = models.DateTimeField()

    def __str__(self):
        return self.title

我只想让用户在管理面板中查看、编辑、添加和删除他们自己的对象,而不是其他人。 我写了这个:

class TodoAdmin(admin.ModelAdmin):

    def queryset(self, request):
        queryset = super(TodoAdmin, self).queryset(request)
        queryset = queryset.filter(user = request.user)
        return queryset

但没用。 我该怎么做?

【问题讨论】:

  • 你从哪里得知 ModelAdmin 有一个名为 queryset 的方法?
  • 在其他问题...有没有办法做到这一点?
  • 你挖出了一些老问题的答案,这就是我问的原因

标签: django permissions django-admin


【解决方案1】:

您必须将get_queryset 方法覆盖为documented

ModelAdmin 上的 get_queryset 方法返回一个包含所有 可以由管理站点编辑的模型实例。一个用例 覆盖此方法是显示登录用户拥有的对象:

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)

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2012-06-23
    • 1970-01-01
    • 2011-01-19
    • 2017-12-05
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多