Enhance QuestionFilter with title and stem search capabilities and update fields in Meta class
This commit is contained in:
+22
-1
@@ -2,6 +2,7 @@ import django_filters
|
||||
from dal import autocomplete
|
||||
|
||||
from .models import Category, Question, UserAnswer, Exam
|
||||
from django.db.models import Q
|
||||
from atlas.models import Condition, Structure, Finding, Presentation, Subspecialty
|
||||
|
||||
#from generic.filters import UserAnswerFilter
|
||||
@@ -32,6 +33,11 @@ def get_authors(request):
|
||||
|
||||
|
||||
class QuestionFilter(django_filters.FilterSet):
|
||||
# simple text searches
|
||||
title = django_filters.CharFilter(field_name='title', lookup_expr='icontains', label='Title')
|
||||
stem = django_filters.CharFilter(field_name='stem', lookup_expr='icontains', label='Stem')
|
||||
# combined quick search across title and stem
|
||||
q = django_filters.CharFilter(method='filter_q', label='Search')
|
||||
exams = django_filters.ModelMultipleChoiceFilter(queryset=get_exams, null_label="No exam")
|
||||
author = django_filters.ModelMultipleChoiceFilter(queryset=get_authors, null_label="No author")
|
||||
category = django_filters.ModelMultipleChoiceFilter(queryset=Category.objects.all(),null_label="Uncategorised")
|
||||
@@ -62,7 +68,7 @@ class QuestionFilter(django_filters.FilterSet):
|
||||
)
|
||||
class Meta:
|
||||
model = Question
|
||||
fields = ("exams", "created_date", "condition", "structure", "finding", "presentation", "category", "subspecialty")
|
||||
fields = ("exams", "created_date", "condition", "structure", "finding", "presentation", "category", "subspecialty", "title", "stem", "q")
|
||||
|
||||
def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None, request=None):
|
||||
if not request.user.groups.filter(name="sba_checker").exists():
|
||||
@@ -70,6 +76,21 @@ class QuestionFilter(django_filters.FilterSet):
|
||||
super(QuestionFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, request=request)
|
||||
pass
|
||||
|
||||
def filter_q(self, queryset, name, value):
|
||||
# search both title and stem
|
||||
if not value:
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(title__icontains=value) |
|
||||
Q(stem__icontains=value) |
|
||||
Q(a_answer__icontains=value) |
|
||||
Q(b_answer__icontains=value) |
|
||||
Q(c_answer__icontains=value) |
|
||||
Q(d_answer__icontains=value) |
|
||||
Q(e_answer__icontains=value) |
|
||||
Q(best_answer__icontains=value)
|
||||
)
|
||||
|
||||
class UserAnswerFilter(django_filters.FilterSet):
|
||||
class Meta:
|
||||
model= UserAnswer
|
||||
|
||||
Reference in New Issue
Block a user