2009-10-22 8 views
5

Estoy tratando de filtrar la lista de usuarios en Django usando un campo de perfil de usuario ... Necesito implementar un sistema de cola donde los nuevos usuarios se ponen en cola hasta que un administrador los apruebaFiltre una lista de usuarios usando un campo UserProfile en Django Admin

Simplemente agregué un campo booleano is_in_queue a mi modelo de perfil de usuario ... Sin embargo, al mostrar la lista de usuarios en mi área de administración, me di cuenta de que no puede filtrar la lista utilizando el campo de clave externa de un modelo (en este caso , un campo de UserProfile)

Aparentemente, list_display artículos pueden ser callables pero list_filter no pueden, entonces puedo listar SI un usuario está en la cola sin ningún problema, pero el administrador debería desplazarse por toda la lista de usuarios para detectar cuáles están en la cola, lo cual no tiene sentido ... Filtrar solo a los usuarios que están en la cola (usando el perfil de usuario.en_cola) sería mucho más práctico ...

Finalmente, pensé en agregar una vista personalizada a mi área de administración que enumeraría solo al usuario en la cola, pero esa vista personalizada no aparece en la página de índice del área de administración, y armar un nuevo sitio de administración solo para un nuevo la opción de filtrado parece un poco exagerada ...

Básicamente, para resumir: ¿Puedo filtrar mi lista de usuarios según un campo de perfil de usuario ? Si no es así, ¿puedo agregar una vista personalizada que esté accesible al desde la página principal sin tener que crear un AdminSite completamente nuevo solo para eso?

Respuesta

1

Es posible que desee echar un vistazo a la utilización de un administrador personalizado para el admin_objects de su modelo.

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) 

Por sobrescribir el método get_query_set puede filtrar los resultados. A continuación, simplemente asigne esto a la propiedad admin_objects de su modelo User.

admin_objects = UserAdminManager() 

Algunos de los nombres de propiedad en mi ejemplo puede estar equivocado, ya que no sé la configuración de su modelo, pero esperamos que pueda hacerse una idea.

Puede investigar esto más a fondo revisando los documentos de django y buscando "gerentes personalizados".

0

Me parece que la opción más rápida y sencilla es agregar una nueva vista de administrador a su aplicación, específicamente para su modelo de usuario personalizado. Consulte el Django admin docs para obtener más detalles, aunque parece que ya sabe cómo usar Admin.

Una vez que la página de administración es específica para su modelo, todos sus campos personalizados ya no serán claves foráneas. Esto facilitaría el filtrado.

Cuestiones relacionadas