Django adminsite настроить запрос search_fields
В django admin вы можете установить поля search_fields для ModelAdmin, чтобы иметь возможность выполнять поиск по свойствам, указанным там. Мой класс модели обладает свойством, которое не является реальным свойством модели, означает, что оно не находится в таблице базы данных. Свойство относится к другой таблице базы данных, которая не привязана к текущей модели через отношения.
Но я хочу, чтобы иметь возможность искать по нему, поэтому мне нужно как-то настроить запрос, созданный сайтом администратора, чтобы сделать фильтрацию, когда поле поиска было заполнено - возможно ли это, и если, как?
Я могу запросить таблицу базы данных моего настраиваемого свойства, а затем возвращает идентификаторы классов модели, подходящих для поиска. Это, как я уже сказал, должно проникнуть в поисковый запрос администратора.
Спасибо!
Ответы
Ответ 1
Начиная с django 1.6, вы можете настроить поиск, определив метод get_search_results
в своем подклассе ModelAdmin
.
Это хорошо объяснено в документации django. Следующий пример копируется из этого документа.
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
Ответ 2
Вы должны использовать search_fields = ['foreign_key__related_fieldname']
как search_fields = ['user__email']
в классе admin, который расширяет admin.ModelAdmin
подробнее здесь
Ответ 3
это может помочь
search_fields = ['foreign_key__related_fieldname']
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields