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

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

    author = models.ForeignKey(User, null = True, blank = True , verbose_name=u'Имя')

и хочу чтоб пользователю в админке это поле не показывалось, но автоматически при сохранении подставлялся 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)

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

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

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">