Django показывать в админке пользователю только его объекты

Written by

in

Ещё довольно частая задача, надо чтоб пользователю в админке показывались только его объекты.
и второй момент, есть у нас в модели поле автор

    author = models.ForeignKey(User, null = True, blank = True , verbose_name=u'Имя')Code language: Python (python)

и хочу чтоб пользователю в админке это поле не показывалось, но автоматически при сохранении подставлялся request.user

Реализуется это как всё по Джанговски в пару движений

в admin.py
наследуемся от модели admin
и немногожечrо допиливаем её

class ListAdmin(admin.ModelAdmin):
    # Добавим всякие фильтра
    list_filter = ('rooms','region','street', 'pub_date')
    #Говорим, чтоб не показывать это поле
    exclude = ('author',)
    # Тут начинается магия, СуперАдмину показываем всё, а пользователю, показываем только его объекты
    def queryset(self, request):
        if request.user.is_superuser:
            return super(ListAdmin, self).queryset(request)
        else:
            return super(ListAdmin, self).queryset(request).filter(author = request.user)
    # Так решим вторую задачу, в поле author подставляем request.user
    def save_model(self, request, obj, form, change):
        if getattr(obj, 'author', None) is None:
            obj.author = request.user
        obj.save()
        
admin.site.register(Estate,ListAdmin)Code language: Python (python)

Вот и всё, не забываем создать отдельную группу для пользователей, в которой указать ту часть приложений куда они могут обращаться.

Comments

Один ответ для «Django показывать в админке пользователю только его объекты»

  1. Аватар пользователя Афанасий
    Афанасий

    Большое вам спасибо! А вы будете писать ещё на эту тему?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *