2012-02-07 15 views
10

Estoy tratando de lograr algo aparentemente simple pero no pude encontrar ninguna respuesta, ni en Google ni aquí. Tengo un modelo de Django, algo muerto-simple:Buscar por ID de clave foránea en admin

class Shipment(models.Model): 
    id = models.AutoField(primary_key=True) 
    transaction = models.ForeignKey(Transaction) 

Me gustaría ser capaz de buscar en mi página de administración Envío por transaction.id. Para mayor claridad, quiero esto (este código, obviamente, no funciona):

class ShipmentAdmin(admin.ModelAdmin): 
    list_display = ('id', 'transaction') 
    search_fields = ['id', 'transaction.id'] 

esto no puede funcionar causa transaction.id no nombra a un campo. ¿Alguna idea? Por "búsqueda" me refiero a poder insertar mi ID de transacción dentro del cuadro de búsqueda de la página Admin. De envío, presionar "buscar" y recuperar automáticamente las transacciones apropiadas.

Respuesta

25

al igual que con la otras opciones de administrador, necesita usar __ for foreign key s por ej.

search_fields = ['id', 'transaction__id'] 
+0

Gracias, funcionó :) –

+0

no parece trabajar si vas hasta dos niveles de claves externas, es decir, 'allocation__project__name' no funciona donde la asignación tiene un FK para proyectar y el proyecto tiene un nombre. ¿Cómo resuelves eso? Sigo recibiendo el " no es un invocable, un atributo de " – radtek

+1

@radtek, que parece funcionar para mí, puedo hacer fk1__fk2__field, solo intentado en 1.7 tho, son asignación y proyecto solo ForeignKey()? – JamesO

4

search_fields documentation:

También puede realizar una búsqueda relacionada en ForeignKey o ManyToManyField con la API de búsqueda de "seguir" notación

Solución:

search_fields = ['id', 'transaction__id'] 
+0

Gracias por el enlace doc :) –

Cuestiones relacionadas