-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathviews.py
More file actions
96 lines (79 loc) · 3.47 KB
/
views.py
File metadata and controls
96 lines (79 loc) · 3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from django.contrib.contenttypes.models import ContentType
from rest_framework.generics import CreateAPIView
from rest_framework.response import Response
from rest_framework.views import APIView
from feed.pagination import FeedPagination
from news.models import News
from news.serializers import NewsFeedListSerializer, DevScriptSerializer
from projects.models import Project
from vacancy.models import Vacancy
class NewSimpleFeed(APIView):
serializator_class = NewsFeedListSerializer
pagination_class = FeedPagination
def get_filter_data(self):
filter_queries = self.request.query_params.get("type")
filter_queries = filter_queries if filter_queries else "" # existence check
news_types = filter_queries.split("|")
if "news" in news_types:
news_types.append("customuser")
return news_types
def get_queryset(self):
filters = self.get_filter_data()
queryset = (
News.objects.select_related("content_type")
.prefetch_related("content_object", "files")
.filter(content_type__model__in=filters)
.order_by("-datetime_created")
)
return queryset
def get(self, *args, **kwargs):
paginator = self.pagination_class()
paginated_data = paginator.paginate_queryset(self.get_queryset(), self.request)
serializer = NewsFeedListSerializer(
paginated_data, context={"user": self.request.user}, many=True
)
new_data = []
# временная подстройка данных под фронт
for data in serializer.data:
if data["type_model"] in ["project", "vacancy", None]:
fomated_data = {
"type_model": data["type_model"],
"content": data["content_object"],
}
elif data["type_model"] == "news":
del data["type_model"]
fomated_data = {"type_model": "news", "content": data}
new_data.append(fomated_data)
return paginator.get_paginated_response(new_data)
class DevScript(CreateAPIView):
serializer_class = DevScriptSerializer
def create(self, request):
content_type_project = ContentType.objects.filter(model="project").first()
for project in Project.objects.filter(draft=False):
if not News.objects.filter(
content_type=content_type_project, object_id=project.id
).exists():
News.objects.create(
content_type=content_type_project,
object_id=project.id,
datetime_created=project.datetime_created,
)
content_type_vacancy = ContentType.objects.filter(model="vacancy").first()
for vacancy in Vacancy.objects.filter(is_active=True):
if not News.objects.filter(
content_type=content_type_vacancy, object_id=vacancy.id
).exists():
News.objects.create(
content_type=content_type_vacancy,
object_id=vacancy.id,
datetime_created=vacancy.datetime_created,
)
news_to_delete = list(
News.objects.filter(
content_type__in=[content_type_vacancy, content_type_project]
)
)
for news in news_to_delete:
if not news.content_object:
news.delete()
return Response({"status": "success"}, status=201)