2009-10-22 6 views
5

UserProfileフィールドを使用してDjangoのユーザリストをフィルタリングしようとしています...新しいユーザが管理者それらを承認する。Django AdminのUserProfileフィールドを使用してユーザリストをフィルタリングする

UserProfileモデルにブール値フィールドis_in_queueを追加するだけですが、管理者エリアにユーザーリストを表示すると、モデルの外部キーフィールドを使用してリストをフィルタリングできないことがわかりました(この場合は、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メソッドを上書きすると、結果をフィルタリングできます。次に、これをUserモデルのadmin_objectsプロパティに割り当てます。

admin_objects = UserAdminManager() 

私はあなたのモデルのセットアップを知らないと、私の例では、プロパティ名のいくつかは、間違っているかもしれないが、うまくいけばあなたのアイデアを得ます。

これをさらに調査するには、djangoドキュメントをチェックし、「カスタムマネージャー」を検索します。

0

最も簡単で簡単なオプションは、アプリケーションに新しい管理ビューを追加することです(特に、カスタムユーザーモデル用)。詳細については、Django admin docsを参照してください。既に管理者を使用する方法を知っているようです。

管理ページがモデルに固有になると、すべてのカスタムフィールドは外部キーにならなくなります。これにより、フィルタリングが容易になります。

関連する問題