Pregunta

Estoy tratando de filtrar la lista de Usuarios en Django usando un Campo de Perfil de Usuario ... Necesito implementar un sistema de colas donde los nuevos usuarios se pongan en cola hasta que un Administrador los apruebe.

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

Aparentemente, los elementos de list_display se pueden llamar, pero list_filter no puede, por lo que puedo enumerar SI un usuario está en la cola sin problemas, pero el administrador tendría para desplazarse por toda la lista de usuarios para detectar cuáles están en la cola, lo que no tiene sentido ... Filtrar solo los usuarios que están en la cola (usando userprofile.in_queue) sería mucho más práctico ...

Finalmente, pensé en agregar una vista personalizada a mi área de administración que mostraría solo al usuario en la cola, pero esa vista personalizada no se mostrará en la página de índice del área de administración, y armar un nuevo sitio de administración solo para una nueva 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, puedo agregar una vista personalizada que sea accesible Desde la primera página sin tener que crear una nueva completamente AdminSite solo para eso?

¿Fue útil?

Solución

Es posible que desee consultar el uso 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)

Al sobrescribir el método get_query_set puede filtrar los resultados. Luego asigne esto a la propiedad admin_objects de su modelo de User .

admin_objects = UserAdminManager()

Algunos de los nombres de propiedades en mi ejemplo pueden estar equivocados, ya que no conozco la configuración de tu modelo, pero espero que tengas la idea.

Puedes investigar esto más a fondo revisando los documentos de django y buscando " administradores personalizados " ;.

Otros consejos

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 los documentos de administración de Django para obtener más información, aunque Parece que ya sabes cómo usar Admin.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top