2014-10-09 3 views
2

У меня есть довольно большой CMS с большим количеством модулей и я регулирование доступа с правами Джанго. Каждое приложение имеет модель UserProfile с объектом User как ForeignKey. Я хочу иметь возможность разрешить простой поиск и создание объектов UserProfile в каждом приложении. Я хотел использовать Внутристрочный, чтобы сделать это, как это (от проекта/приложение/admin.py):Регистрация той же модель в различных конфигурациях для различных приложений с Django администратором

class InlineModelForUser(admin.TabularInline): 
    model = User 
    extra=0 

class UserSettings(admin.ModelAdmin): 
    search_fields = ['username', 'name'] 
    readonly_fields = ['username','name', 'otherproperites'] 
    inlines = [InlineModelForUser,] 

admin.site.register(User, UserSettings) 

Ошибки возвращаемым: «Модель пользователь уже зарегистрирован». Я понимаю, почему это происходит, и я ценю, что я, вероятно, могу реализовать ту же функциональность по-другому. То, что я пытаюсь достичь, - это отделить редактирование базового объекта (Пользователь) и прикрепленного объекта профиля приложения. Я вижу, конечно, что я могу сделать поле автозаполнения в CreateView для UserProfile, но иногда вам необходимо предоставить различные инструменты фильтрации для каждого приложения (фильтрация/против свойств пользователя) и необходимость скрыть некоторую информацию пользователя от пользователей каждое приложение.

В принципе: Как я в django.contrib.admin может построить несколько представлений в отношении одной и той же модели и зарегистрировать его с admin.site.register?

+0

Что еще отсутствует в том, что прокси-объект необходим свой собственный набор разрешений. Я не совсем уверен, как вам лучше всего это реализовать. Я делаю это вручную для этого прецедента, который я решаю, но отчитаюсь, если найду что-то элегантное. –

ответ

2

Найдено this и частично отвечает дилемма:

class PostAdmin(admin.ModelAdmin): 
    list_display = ('title', 'pubdate','user') 

class MyPosts(Post): 
    class Meta: 
     proxy = True 

class MyPostAdmin(PostAdmin): 
    def queryset(self, request): 
     return self.model.objects.filter(user = request.user) 

admin.site.register(Post, PostAdmin) 
admin.site.register(MyPost, MyPostAdmin)