Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

from django.db import models 

from rest_framework.permissions import BasePermission 

 

from backend_app.models.abstract.versionedEssentialModule import ( 

VersionedEssentialModule, 

VersionedEssentialModuleSerializer, 

VersionedEssentialModuleViewSet, 

) 

from backend_app.models.exchange import Exchange 

from backend_app.models.university import University 

from backend_app.permissions.app_permissions import ReadOnly, IsStaff, NoDelete, NoPost 

from backend_app.permissions.moderation import ModerationLevels 

 

 

class SharedUnivFeedback(VersionedEssentialModule): 

moderation_level = ModerationLevels.DEPENDING_ON_SITE_SETTINGS 

university = models.OneToOneField(University, on_delete=models.PROTECT, null=True) 

comment = models.CharField(default="", blank=True, max_length=5000) 

 

 

class SharedUnivFeedbackSerializer(VersionedEssentialModuleSerializer): 

check_obj_permissions_for_edit = True 

 

class Meta: 

model = SharedUnivFeedback 

fields = VersionedEssentialModuleSerializer.Meta.fields + ( 

"university", 

"comment", 

) 

read_only_fields = ("university",) 

 

 

class SharedUnivPermission(BasePermission): 

""" 

Permission that checks that the requester went to the university. 

""" 

 

def has_object_permission(self, request, view, obj: SharedUnivFeedback): 

return Exchange.objects.filter( 

student=request.user, university=obj.university 

).exists() 

 

 

class SharedUnivFeedbackViewSet(VersionedEssentialModuleViewSet): 

permission_classes = ( 

NoDelete & NoPost & (ReadOnly | IsStaff | SharedUnivPermission), 

) 

queryset = SharedUnivFeedback.objects.all() 

serializer_class = SharedUnivFeedbackSerializer 

end_point_route = "sharedUnivFeedbacks" 

filterset_fields = ("university",) 

required_filterset_fields = ("university",)