允许用户在 django admin 中查看自己的对象

allow users view own objects in django admin

我想授予用户访问管理面板的权限

我有一个 table :


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

但是没用。 我该怎么做?

您必须将 get_queryset 方法重写为 documented

The get_queryset method on a ModelAdmin returns a QuerySet of all model instances that can be edited by the admin site. One use case for overriding this method is to show objects owned by the logged-in user:

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)