Skip to content

Commit 0c844d2

Browse files
committed
added filtering vacancies by is_active and project
removed unnecessary fields from Projects from VacanciesList
1 parent 7e506f0 commit 0c844d2

4 files changed

Lines changed: 49 additions & 3 deletions

File tree

vacancy/filters.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from django_filters import rest_framework as filters
2+
3+
from vacancy.models import Vacancy
4+
5+
6+
class VacancyFilter(filters.FilterSet):
7+
"""Filter for Vacancies
8+
9+
Adds filtering to DRF list retrieve views
10+
11+
Parameters to filter by:
12+
project (int), is_active (default to True if not set otherwise) (boolean)
13+
14+
Examples:
15+
?project=1 equals to .filter(project_id=1)
16+
(no params passed) equals to .filter(is_active=True)
17+
?is_active=false equals to .filter(is_active=False)
18+
"""
19+
20+
def __init__(self, *args, **kwargs):
21+
"""if is_active filter is not passed, default to True"""
22+
super().__init__(*args, **kwargs)
23+
if self.data.get("is_active") is None:
24+
self.data = dict(self.data)
25+
self.data["is_active"] = True
26+
27+
is_active = filters.BooleanFilter(field_name="is_active")
28+
29+
class Meta:
30+
model = Vacancy
31+
fields = ("project", "is_active")

vacancy/managers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ def get_vacancy_for_list_view(self):
1313
"project__id",
1414
"is_active",
1515
)
16-
.filter(is_active=True)
1716
)
1817

1918
def get_vacancy_for_detail_view(self):

vacancy/serializers.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
from rest_framework import serializers
22

3-
from projects.serializers import ProjectListSerializer
3+
from projects.models import Project
44
from users.serializers import UserSerializer
55
from vacancy.models import Vacancy, VacancyResponse
66

77

8+
class ProjectForVacancySerializer(serializers.ModelSerializer):
9+
class Meta:
10+
model = Project
11+
fields = [
12+
"id",
13+
"name",
14+
"description",
15+
"short_description",
16+
"image_address",
17+
]
18+
19+
820
class VacancyDetailSerializer(serializers.ModelSerializer):
9-
project = ProjectListSerializer(many=False)
21+
project = ProjectForVacancySerializer(many=False)
1022

1123
class Meta:
1224
model = Vacancy

vacancy/views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
from django_filters import rest_framework as filters
12
from rest_framework import generics, permissions, mixins, status
23
from rest_framework.generics import GenericAPIView
34
from rest_framework.response import Response
45

6+
from vacancy.filters import VacancyFilter
57
from vacancy.models import Vacancy, VacancyResponse
68
from vacancy.serializers import (
79
VacancyDetailSerializer,
@@ -15,6 +17,8 @@ class VacancyList(generics.ListCreateAPIView):
1517
queryset = Vacancy.objects.get_vacancy_for_list_view()
1618
serializer_class = ProjectVacancyListSerializer
1719
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
20+
filter_backends = (filters.DjangoFilterBackend,)
21+
filterset_class = VacancyFilter
1822

1923

2024
class VacancyDetail(generics.RetrieveUpdateDestroyAPIView):

0 commit comments

Comments
 (0)