Commit 674108cb6370af1c6f5f3af5757f1c29d56bc83e
1 parent
3e309da4
Exists in
master
and in
2 other branches
Changing the way that subjects and participants are loaded in api
Showing
4 changed files
with
45 additions
and
4 deletions
Show diff stats
api/urls.py
@@ -14,6 +14,7 @@ router.register(r'logs', LogViewSet) | @@ -14,6 +14,7 @@ router.register(r'logs', LogViewSet) | ||
14 | router.register(r'usersapi', UserViewSet) | 14 | router.register(r'usersapi', UserViewSet) |
15 | router.register(r'users', views.LoginViewset) | 15 | router.register(r'users', views.LoginViewset) |
16 | router.register(r'subjects', views.SubjectViewset) | 16 | router.register(r'subjects', views.SubjectViewset) |
17 | +router.register(r'participants', views.ParticipantsViewset) | ||
17 | 18 | ||
18 | urlpatterns = [ | 19 | urlpatterns = [ |
19 | #API REST | 20 | #API REST |
api/views.py
@@ -2,11 +2,14 @@ import requests, json | @@ -2,11 +2,14 @@ import requests, json | ||
2 | from django.shortcuts import get_object_or_404, reverse | 2 | from django.shortcuts import get_object_or_404, reverse |
3 | from django.contrib.auth import authenticate | 3 | from django.contrib.auth import authenticate |
4 | from django.views.decorators.csrf import csrf_exempt | 4 | from django.views.decorators.csrf import csrf_exempt |
5 | + | ||
5 | from rest_framework import viewsets | 6 | from rest_framework import viewsets |
6 | from rest_framework.response import Response | 7 | from rest_framework.response import Response |
7 | from rest_framework.decorators import detail_route, list_route | 8 | from rest_framework.decorators import detail_route, list_route |
8 | from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly | 9 | from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly |
9 | 10 | ||
11 | +from django.db.models import Q | ||
12 | + | ||
10 | from security.models import Security | 13 | from security.models import Security |
11 | 14 | ||
12 | from subjects.serializers import SubjectSerializer | 15 | from subjects.serializers import SubjectSerializer |
@@ -139,4 +142,42 @@ class SubjectViewset(viewsets.ReadOnlyModelViewSet): | @@ -139,4 +142,42 @@ class SubjectViewset(viewsets.ReadOnlyModelViewSet): | ||
139 | 142 | ||
140 | response = json.dumps(sub_info) | 143 | response = json.dumps(sub_info) |
141 | 144 | ||
145 | + return HttpResponse(response) | ||
146 | + | ||
147 | +class ParticipantsViewset(viewsets.ReadOnlyModelViewSet): | ||
148 | + queryset = User.objects.all() | ||
149 | + permissions_classes = (IsAuthenticated, ) | ||
150 | + | ||
151 | + @csrf_exempt | ||
152 | + @list_route(methods = ['POST'], permissions_classes = [IsAuthenticated]) | ||
153 | + def get_participants(self, request): | ||
154 | + username = request.data['email'] | ||
155 | + subject_slug = request.data['subject_slug'] | ||
156 | + | ||
157 | + participants = None | ||
158 | + | ||
159 | + response = "" | ||
160 | + | ||
161 | + if not subject_slug == "": | ||
162 | + participants = User.objects.filter(Q(is_staff = True) | Q(subject_student__slug = subject_slug) | Q(professors__slug = subject_slug) | Q(coordinators__subject_category__slug = subject_slug)).exclude(email = username).distinct() | ||
163 | + | ||
164 | + serializer = UserSerializer(participants, many = True) | ||
165 | + | ||
166 | + json_r = json.dumps(serializer.data) | ||
167 | + json_r = json.loads(json_r) | ||
168 | + | ||
169 | + info = {} | ||
170 | + | ||
171 | + info["data"] = {} | ||
172 | + info["data"]["participants"] = json_r | ||
173 | + | ||
174 | + info["message"] = "" | ||
175 | + info["type"] = "" | ||
176 | + info["title"] = "" | ||
177 | + info["success"] = True | ||
178 | + info["number"] = 1 | ||
179 | + info['extra'] = 0 | ||
180 | + | ||
181 | + response = json.dumps(info) | ||
182 | + | ||
142 | return HttpResponse(response) | 183 | return HttpResponse(response) |
143 | \ No newline at end of file | 184 | \ No newline at end of file |
subjects/serializers.py
@@ -26,8 +26,7 @@ class TagSerializer(serializers.ModelSerializer): | @@ -26,8 +26,7 @@ class TagSerializer(serializers.ModelSerializer): | ||
26 | validators = [] | 26 | validators = [] |
27 | 27 | ||
28 | class SubjectSerializer(serializers.ModelSerializer): | 28 | class SubjectSerializer(serializers.ModelSerializer): |
29 | - participants = UserSerializer(many = True, source = 'get_participants') | ||
30 | - | 29 | + |
31 | class Meta: | 30 | class Meta: |
32 | model = Subject | 31 | model = Subject |
33 | - fields = ["name", "slug", "visible", "participants"] | ||
34 | \ No newline at end of file | 32 | \ No newline at end of file |
33 | + fields = ["name", "slug", "visible"] | ||
35 | \ No newline at end of file | 34 | \ No newline at end of file |
users/serializers.py
@@ -60,5 +60,5 @@ class UserBackupSerializer(serializers.ModelSerializer): | @@ -60,5 +60,5 @@ class UserBackupSerializer(serializers.ModelSerializer): | ||
60 | class UserSerializer(serializers.ModelSerializer): | 60 | class UserSerializer(serializers.ModelSerializer): |
61 | class Meta: | 61 | class Meta: |
62 | model = User | 62 | model = User |
63 | - fields = ('username','email','image','last_update','date_created','last_name','social_name', | 63 | + fields = ('username','email','image_url','last_update','date_created','last_name','social_name', |
64 | 'is_staff','is_active','description') | 64 | 'is_staff','is_active','description') |