Ещё довольно частая задача, надо чтоб пользователю в админке показывались только его объекты.
и второй момент, есть у нас в модели поле автор
[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]
Вот и всё, не забываем создать отдельную группу для пользователей, в которой указать ту часть приложений куда они могут обращаться.