Simple app to add configuration options to a Django project.
1from rest_framework import viewsets
2from rest_framework.permissions import IsAuthenticated
3
4from options import get_option_model, get_user_option_model
5from options.rest_framework.permissions import IsAdminForNoSafeMethods
6from options.rest_framework.serializers import OptionSerializer, UserOptionSerializer
7
8Option = get_option_model()
9UserOption = get_user_option_model()
10
11
12class OptionViewSet(viewsets.ModelViewSet):
13 queryset = Option.objects.all()
14 serializer_class = OptionSerializer
15 permission_classes = (IsAdminForNoSafeMethods,)
16
17 def get_queryset(self):
18 queryset = super().get_queryset()
19 if self.request.user.is_authenticated and self.request.user.is_staff:
20 return queryset
21 return queryset.public()
22
23
24class UserOptionViewSet(viewsets.ModelViewSet):
25 queryset = UserOption.objects.filter_user_customizable()
26 serializer_class = UserOptionSerializer
27 permission_classes = (IsAuthenticated,)
28
29 def get_queryset(self):
30 queryset = super().get_queryset()
31 if self.request.user.is_authenticated and self.request.user.is_staff:
32 return queryset
33 return queryset.public().filter(user=self.request.user)
34
35 def perform_create(self, serializer):
36 serializer.save(user=self.request.user)