2010-06-17 18 views
11

W administratorze django możesz ustawić pola wyszukiwania dla ModelAdmin, aby móc przeszukiwać podane tam właściwości. Moja klasa modelu ma właściwość, która nie jest rzeczywistą właściwością modelu, co oznacza, że ​​nie znajduje się w tabeli bazy danych. Właściwość odnosi się do innej tabeli bazy danych, która nie jest powiązana z bieżącym modelem poprzez relacje. Ale chcę mieć możliwość przeszukiwania go, więc muszę w jakiś sposób dostosować zapytanie, które tworzy witryna administratora, aby wykonać filtrowanie po wypełnieniu pola wyszukiwania - czy jest to możliwe i czy, jak? Mogę zapytać o tabelę bazy danych mojej właściwości niestandardowej, a następnie zwróci identyfikatory klas modeli pasujących do wyszukiwania. To, jak powiedziałem, musi wpłynąć na zapytanie wyszukiwania strony administracyjnej.Administrator Django spersonalizuj zapytanie search_fields

Dzięki!

+0

Czy prawdopodobnie masz na myśli odwrotną relację zdefiniowaną w innym modelu? –

Odpowiedz

0

należy użyć search_fields = ['foreign_key__related_fieldname'] jak search_fields = ['user__email'] w klasie administratora, który rozciąga admin.ModelAdmin

czytaj więcej here

+0

to cierpi na ten sam problem z odpowiedzią @shahjapana – FSp

11

Od wersji django 1.6 można dostosować wyszukiwanie, definiując metodę get_search_results w podklasie .

Jest to dobrze wyjaśnione w django documentation. Poniższy przykład został skopiowany z tego dokumentu.

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('name', 'age') 
    search_fields = ('name',) 

    def get_search_results(self, request, queryset, search_term): 
     queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term) 
     try: 
      search_term_as_int = int(search_term) 
      queryset |= self.model.objects.filter(age=search_term_as_int) 
     except: 
      pass 
     return queryset, use_distinct 
Powiązane problemy