开发者

Django admin - Is it possible to limit a user's access to only his own inputted data?

In other words, I would like to disallow users from editing or viewing anything but their own inputted data, throughout all applications.

I read here that this may be impossible with the built in admin application. If so is there an extension available?开发者_运维知识库

Thanks


It can be done. You need to create the appropriate modelAdmin in your admin.py first.

For list "display" filtering modify the queryset method:

class MyModelAdmin(admin.ModelAdmin):

    def queryset(self, request):
        return Entry.objects.filter(owner=request.user)

For field filtering, depending on the field type you want to limit you override the appropriate method.

Related django documentation is here: https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

To limit foreignkey field output you can do something like this: (from the django documentation)

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "car": # The name of the field you want to limit
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜