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

Ещё довольно частая задача, надо чтоб пользователю в админке показывались только его объекты.
и второй момент, есть у нас в модели поле автор
[cc lang=”python”] author = models.ForeignKey(User, null = True, blank = True , verbose_name=u’Имя’)[/cc]
и хочу чтоб пользователю в админке это поле не показывалось, но автоматически при сохранении подставлялся request.user

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

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

[cc lang=”python”]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)[/cc]

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

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

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


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