2009-10-22 14 views
5

Próbuję filtrować listę użytkowników w Django przy użyciu pola UserProfile ... Muszę zaimplementować system kolejki, w którym nowi użytkownicy są umieszczani w kolejce do czasu, aż administrator zatwierdza je.Filtrowanie listy użytkowników za pomocą pola UserProfile w Django Admin

Po prostu dodałem pole boolowskie is_in_queue do mojego profilu UserProfile ... Jednak podczas wyświetlania listy użytkowników w moim obszarze admina zdałem sobie sprawę, że nie można filtrować listy za pomocą pola klucza obcego modelu (w tym przypadku , pole UserProfile)

Pozornie, list_display przedmioty mogą być podpalane, ale list_filter nie może, więc mogę wymienić, jeśli użytkownik jest w kolejce bez problemu, ale administrator musiałby przejrzeć całą listę użytkowników aby wykryć, które są w kolejce, co nie ma sensu ... Filtrowanie tylko użytkowników znajdujących się w kolejce (przy użyciu userprofile.in_queue) byłoby o wiele bardziej praktyczne ...

W końcu pomyślałem o dodaniu niestandardowego widoku do mojego obszaru administracyjnego, który wyświetliłby tylko użytkownika w kolejce, ale ten niestandardowy widok nie pojawi się na stronie indeksu obszaru administracyjnego, a składanie całego nowego AdminSite tylko dla nowego opcja filtrowania wydaje się nieco przesadzona ...

Podsumowując: Czy mogę filtrować listę użytkowników na podstawie pola UserProfil ? Jeśli nie, to czy mogę dodać niestandardowy widok, który jest dostępny na pierwszej stronie, bez konieczności tworzenia zupełnie nowego tylko dla AdminSite?

Odpowiedz

1

Możesz zajrzeć do korzystania z niestandardowego menedżera dla modelu admin_objects swojego modelu.

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) 

Po zastąpieniu metody get_query_set można filtrować wyniki. Następnie przypisz to do właściwości admin_objects swojego modelu User.

admin_objects = UserAdminManager() 

Niektóre z nazw właściwości w moim przykładzie mogą być błędne, ponieważ nie znam konfiguracji twojego modelu, ale mam nadzieję, że wpadłeś na ten pomysł.

Możesz zbadać to dalej, przeglądając dokumenty django i wyszukując "menedżerów niestandardowych".

0

Wydaje mi się, że najszybszą i najłatwiejszą opcją jest dodanie nowego widoku administratora do aplikacji, w szczególności do niestandardowego modelu użytkownika. Szczegółowe informacje można znaleźć w numerze Django admin docs, ale wygląda na to, że już wiesz, jak używać administratora.

Po wybraniu strony administratora dla danego modelu wszystkie pola niestandardowe nie będą już kluczami obcymi. Ułatwiłoby to filtrowanie.

Powiązane problemy