2017-01-26 4 views
0

Теперь я начинаю использовать django, и у меня есть проблема с фильтрацией данных на основе пользовательской информации. Позвольте мне объяснить, как работает мое приложение. Пользователь в моем приложении принадлежит компании. Поэтому я создал таблицу под названием «Компания» для сбора информации о компании. Затем я создал другую таблицу под названием UserCompany. В основном, он хранит идентификатор пользователя Django и идентификатор из таблицы моей компании. Теперь я хочу фильтровать данные, которые пользователь увидит в Django Admin на основе их идентификатора компании. Он/она может видеть только данные на основе их идентификатора компании. Я смог оценить этого пользователя, используя get_queryset в admin.py. Моя единственная проблема в том, что раскрывающийся список, который отображается в админке в результате внешних ключей, не фильтруется. Я провел некоторое исследование и узнал о limit_choices_to. Я могу установить это статически следующим образом:Django admin - Ограничить выбор в раскрывающемся списке

class Cleaner(models.Model): 
    company = models.ForeignKey('Company',limit_choices_to = {'companyname' = 'Test'} 

Выпадающий список в разделе администратора показывает только тестер компании. Как я могу сделать это динамически? Я делаю это в модели или делаю это в admin.py? Пожалуйста помоги!!

ответ

0

Пришло время настроить CustomAdmin для ваших моделей сейчас. Вы должны переопределить метод formfield_for_foreignkey из ModelAdmin

class CleanerAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 
     if db_field.name == "company": 
       kwargs["queryset"] = Company.objects.filter(name='Test') 
     return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

admin.site.register(CleanerAdmin, Cleaner) 

Если есть сессия конкретный фильтр, для которого нужна ссылка на вход в объекте пользователя Вы также ссылка на объект запроса. Здесь вы можете написать любую логику.

+0

спасибо. это было полезно. –

Смежные вопросы