Skip to content

Commit 0cc819d

Browse files
committed
answers filter 추가
1 parent 65d4ae6 commit 0cc819d

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

apps/answer/filters.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
from django.db.models import Q
12
from ninja import FilterSchema
23

34

45
class AnswerFilter(FilterSchema):
5-
pass
6+
models: list[str]
7+
8+
def filter_models(self, data):
9+
return Q(model_answers__model_id__in=data)

apps/answer/views.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
from ninja import Router
1+
from django.db.models import Count, Q
2+
from ninja import Router, Query
23
from ninja.pagination import paginate
34

5+
from apps.answer.filters import AnswerFilter
46
from apps.answer.models import UserAnswer
57
from apps.answer.schemas import UserAnswerSchema
68
from contrib.django.ninja.pagination import ContribPageNumberPagination
@@ -10,6 +12,13 @@
1012

1113
@router.get('/answers', response=list[UserAnswerSchema])
1214
@paginate(ContribPageNumberPagination, page_size=4)
13-
def get_answers(request):
14-
answers = UserAnswer.objects.all()
15+
def get_answers(request, filter: AnswerFilter = Query(...)):
16+
answers = UserAnswer.objects.prefetch_related("model_answers").annotate(
17+
matching_names=Count(
18+
'model_answers',
19+
filter=Q(model_answers__model_id__in=filter.models)
20+
)
21+
).filter(
22+
matching_names=len(filter.models)
23+
)
1524
return answers

0 commit comments

Comments
 (0)