2012-02-07 13 views
10

Sto cercando di raggiungere qualcosa di apparentemente semplice ma non ho trovato nessuna risposta, né su Google né qui. Ho un modello Django, qualcosa di morto-semplice:Ricerca per chiave esterna id in admin

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

Mi piacerebbe essere in grado di cercare nella mia pagina di amministrazione Spedizione da transaction.id. Per chiarezza, voglio che questo (il codice, ovviamente, non funziona):

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

Questo non può funzionare causa transaction.id non nominare un campo. Qualche idea? Con "ricerca" intendo inserire il mio ID di transazione nella casella di ricerca della pagina di amministrazione della spedizione, premere "cerca" e recuperare automaticamente le transazioni appropriate.

risposta

25

come con il altre opzioni di amministrazione, è necessario utilizzare __ for foreign key s es

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

Grazie, ha funzionato :) –

+0

non sembra funzionare se si sta andando su due livelli di chiavi esterne, vale a dire 'allocation__project__name' non funziona dove allocazione ha un FK per proiettare e il progetto ha un nome. Come lo risolvi? Continuo a ricevere " non è una richiamabile, un attributo di " – radtek

+1

@radtek, che sembra funzionare per me, posso fare fk1__fk2__field, solo provato in 1.7 tho, sono allocazione e progetto solo ForeignKey()? – JamesO

4

search_fields documentation:

È inoltre possibile eseguire una ricerca correlata su un ForeignKey o ManyToManyField con l'API di ricerca "seguire" la notazione

Soluzione:

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

Grazie per il link doc :) –