Реализация строки поиска Django с фильтрацией по нескольким полям
Я пытаюсь реализовать функциональность строки поиска.
мой models.py
:
class Question(models.Model):
questionId = models.IntegerField(primary_key=True)
groupId = models.IntegerField(default=0)
questionTitle = models.TextField()
groupName = models.CharField(max_length=500, null=True, blank=True)
correctAnsRef = models.ManyToManyField(CorrectAns, related_name="questionReletedResponses")
Моя база данных огромна, поэтому я попытался пропустить Question.objects.all()
, чтобы сэкономить время.
мой views.py
:
def questionList(request)
# Searching Any Value
if request.method == "POST" and request.POST['searchKey'] != '':
searchKey = request.POST['searchKey']
questions = Question.objects.filter(questionId=searchKey)
return render(request,'diagnosis/questionList.html', {'questions': questions})
Это прекрасно работает, но может фильтровать только по questionId
. Я хочу иметь такую строку поиска, которая будет фильтровать по всем полям (questionId
, groupId
, questionTitle
... и т.д.), которые есть у модели Question
. (Примечание: request.GET
уже используется для пагинации.)
Пожалуйста, подскажите, как я могу это сделать?
Для более сложного поиска используйте Q-объекты.
from django.db.models import Q
def questionList(request)
# Searching Any Value
if request.method == "POST" and request.POST['searchKey'] != '':
searchKey = request.POST['searchKey']
# returns a Queryset with Question objects where any of the fields match the searchKey
questions = Question.objects.filter(Q(questionId=searchKey) | Q(groupId=searchKey) | Q(questionTitle=searchKey))
return render(request,'diagnosis/questionList.html', {'questions': questions})