Реализация строки поиска 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})
Вернуться на верх