2012-02-07 9 views
10

Próbuję osiągnąć coś pozornie prostego, ale nie mogłem znaleźć żadnej odpowiedzi, ani w Google ani tutaj. Mam modelu Django, coś martwego prosta:Wyszukiwanie według klucza obcego w admin

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

Chciałbym być w stanie wyszukać w mojej stronie Administrator przesyłki przez transaction.id. Do jasności chcę tego (kod ten oczywiście nie działa):

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

ten nie może pracować przyczyna transaction.id nie nazwa pola. Dowolny pomysł? Przez "wyszukiwanie" mam na myśli możliwość wstawienia mojego identyfikatora transakcji w polu wyszukiwania na stronie Administracja przesyłek, naciśnięcie "szukaj" i automatyczne pobranie odpowiednich transakcji.

Odpowiedz

25

jak w przypadku inne opcje administratora, musisz użyć np. __ for foreign key s

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

Dzięki, zadziałało :) –

+0

To nie wydaje się działać, jeśli masz zamiar się dwa poziomy kluczy obcych, czyli „allocation__project__name” nie działa, gdzie alokacja ma projekt FK do projektu, a projekt ma nazwę. Jak rozwiązać ten problem? Ciągle otrzymuję " nie jest wywoływalne, atrybut " – radtek

+1

@radtek, który wydaje się działać dla mnie, mogę zrobić fk1__fk2__field, tylko wypróbowany w 1,7 tho, są alokacji i projektu tylko ForeignKey()? – JamesO

4

search_fields documentation:

Można również wykonać powiązany odnośnika na ForeignKey lub ManyToManyField z API przeglądowej "śledzić" notacja

rozwiązanie:

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

Dzięki za link doc :) –

Powiązane problemy