2010-06-17 9 views
11

Tengo una base de datos que realiza un seguimiento de la interacción entre dos equipos diferentes (representados en la interfaz de administración por dos grupos diferentes). Para algunos campos, tengo una clave externa para la base de datos de usuarios, y me gustaría limitar las personas desplegables a solo los grupos específicos.cómo limitar el menú desplegable de la clave externa con restricciones?

¡Si alguien tiene alguna sugerencia, sería muy apreciada!

Respuesta

16

Está buscando limit_choices_to.

+0

¡Hola, gracias por tu respuesta! Sin embargo, creo que la relación usuario-grupo reside en diferentes tablas en django admin, ¿cómo puedo filtrar en ese caso? – FurtiveFelon

+0

Con objetos 'Q'. 'Q (group__icontains = u'user ')' –

+0

Hola Ignacio, todavía estoy un poco confundido sobre cómo hacer esto. Después de profundizar más en el código para el módulo de autenticación, he encontrado que los grupos están definidos en la clase de usuario de la siguiente manera: groups = models.ManyToManyField (Group, verbose_name = _ ('groups'), blank = True,). La consulta se basa en Usuarios, por lo que me gustaría verificar si el Usuario actual en cuestión está en el grupo "Legal". Tenga en cuenta que el modelo de grupo tiene una ID, por lo que el nombre no se almacena en el usuario directamente. ¡Muchas gracias por toda tu ayuda! – FurtiveFelon

2

Puede cambiar el conjunto de consultas subyacente para el campo de formulario: How do I filter ForeignKey choices in a Django ModelForm?

+0

Parece que se debe hacer en la vista, pero no estoy seguro de cómo acceder a la vista, a lo único que tengo acceso es a la clase de modelo y a la clase modeladmin. ¡Cualquier sugerencia direccional particular sería muy apreciada! – FurtiveFelon

+0

¡Debe usar un formulario personalizado y hacerlo en '' __init__'' del formulario! def __init __ (self, * args, ** kwargs): super (MyForm, self) .__ init __ (* args, ** kwargs) self.fields ["usuario"]. Queryset = User.objects.filter (. ..) –

Cuestiones relacionadas