显示与当前用户django admin相关的对象

时间:2016-09-20 15:16:35

标签: python django django-queryset

我试图只显示与当前用户相关的对象。用户可以上传文件,然后他们只能在管理员中看到他们的文件。这是我的模特:

class Share(models.Model):
    owner = models.ForeignKey(User, default='')
    title = models.CharField("File's title", max_length=100, unique=True, default='File')
    zip_file = models.FileField('Shared File', upload_to=content_zip_name, validators= [validation_zip])

和我的admin.py

from django.contrib import admin
from share.models import Share

class ShareAdmin(admin.ModelAdmin):
    list_display = ('title',)
    save_as = True

    def queryset(self, request):
        qs = super(ShareAdmin, self).queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(owner=request.user)

admin.site.register(Share, ShareAdmin)

我尝试覆盖查询集功能但是没有工作......任何想法?

1 个答案:

答案 0 :(得分:1)

您已将queryset方法(与list_filter一起使用)与get_queryset方法混淆:

  

get_queryset上的ModelAdmin方法会返回所有 QuerySet   可以由管理站点编辑的模型实例。一个用例   重写此方法是显示已登录所拥有的对象   用户。

[强调我的]

class ShareAdmin(admin.ModelAdmin):
    list_display = ('title',)
    save_as = True

    def get_queryset(self, request):
        qs = super(ShareAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(owner=request.user)