Я разрабатываю приложение с Django.Я разработал панель поиска для фильтрации содержимого базы данных.
Я хочу, чтобы, когда пользователь нажимает кнопку поиска, указанное содержимое ищется во всех полях модели.
В моей модели 16 полей, так что моя команда фильтра будет очень длинной строкой, например:
selected_entries = glossary_entry.objects.filter(Q(field1__icontains=query) | Q(field2__icontains=query)) | ...ETC ETC... | Q(field16__icontains=query))
Здесь вы можете увидеть эту строку в моей функции просмотра в views.py :
def glossario(request):
query = request.GET.get('q')
template = "glossario.html"
# query applied
if query:
query = request.GET.get('q')
selected_entries = glossary_entry.objects.filter(Q(field1__icontains=query) | Q(field2__icontains=query)) | ...ETC ETC... | Q(field16__icontains=query))
return render(request, template, {'all_entries':selected_entries})
# no query
else:
all_entries = glossary_entry.objects.all
return render(request, template, {'all_entries':all_entries})
Есть ли более короткая команда, чтобы сделать то же самое?
Как:
selected_entries = glossary_entry.objects.filter(Q(ALL_MODEL_FIELDS_ICONTAINS(model=MyModel)=query))
Примечание: ALL_MODEL_FIELDS_ICONTAINS
- мое изобретение