Tuesday, August 18, 2009

Ограниченый QuerySet для админ интерфейса Django

Django очень удобный и очень гибкий фреймворк для создания сайтов. Столкнувшись с задачей ограничения выборки для админ интерфейса я не поверил что этого нельзя сделать. На практике задача заключалась в том что мне нужно было показывать и давать возможность редактировать записи относящиеся только к группе в которой состоит текущий пользователь.

В документации по админу на официальном сайте Django ничего по этому поводу не сказано. Ну раз ничего в документации нет, значит полезем в код. Оказывается это предусмотреный функционал, только вот почему-то он не задокументирован. Таким образом переопределив метод queryset в классе админа можно скрыть объекты которые нельзя/ненужно показывать текущему пользователю.

В моем случае это выглядело так:
class MyAdmin(admin.ModelAdmin):
    #....
    def queryset(self, request):
        super_qs = super(MyAdmin, self).queryset(request)
        qs = super_qs.filter(group__in=request.user.groups.all())
        return qs

0 comments:

Post a Comment