2009-10-22 2 views
5

Я пытаюсь отфильтровать список пользователей в Django с помощью поля UserProfile ... Мне нужно реализовать систему очередей, в которой новые пользователи помещаются в очередь до администратора утверждает их.Отфильтровать список пользователей с помощью поля UserProfile в Django Admin

Я просто добавил логическое поле is_in_queue в мою модель UserProfile ... Однако при отображении списка пользователей в моей области администрирования я понял, что вы не можете отфильтровать список, используя поле внешнего ключа модели (в данном случае , поле UserProfile)

По-видимому, list_display элементы могут быть вызываемыми, но list_filter не может, поэтому я могу указать, если пользователь находится в очереди без проблем, но администратору придется прокручивать весь список пользователей чтобы определить, какие из них находятся в очереди, что не имеет смысла ... Фильтрация только тех пользователей, которые находятся в очереди (с использованием userprofile.in_queue), была бы гораздо более практичной ...

Наконец, я подумал о добавлении пользовательского представления в мою область администрирования, в котором будет отображаться только пользователь в очереди, но этот пользовательский вид не отображается на странице индекса области администратора и объединяет целый новый AdminSite только для нового опция фильтрации кажется немного поверх ...

Так что в принципе подвести итог: могу ли я фильтровать свой список пользователей на основе поля UserProfile ? Если нет, могу ли я добавить пользовательский вид, доступный с первой страницы, без необходимости создавать совершенно новый AdminSite только для этого?

ответ

1

Возможно, вы захотите ознакомиться с использованием пользовательского менеджера для модели admin_objects вашей модели.

class UserAdminManager(models.AdminManager): 
""" 
Custom manager for the User model. 
""" 
def get_query_set(self): 
    """ 
    Overwrites the get_query_set to only return Users in the queue. 
    """ 
    return super(UserAdminManager, self).get_query_set().filter(userprofile__queue=True) 

Переписывания метода get_query_set вы можете отфильтровать результаты. Затем просто назначьте это свойству admin_objects вашей модели User.

admin_objects = UserAdminManager() 

Некоторые из имен свойств в моем примере может быть неправильным, так как я не знаю ваших настроек модели, но, надеюсь, вы получите идею.

Вы можете изучить это дальше, проверив django docs и выполнив поиск «пользовательских менеджеров».

0

Мне кажется, что самый быстрый и простой вариант - добавить новый администраторский вид в приложение, в частности, для вашей пользовательской модели. Подробнее см. В разделе Django admin docs, хотя похоже, что вы уже знаете, как использовать Admin.

После того, как страница администратора относится к вашей модели, все ваши пользовательские поля больше не будут внешними ключами. Это упростит фильтрацию.

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