Different serializers for channel Get & Post
This commit is contained in:
parent
93b3b1ace3
commit
9c106a5466
@ -117,13 +117,26 @@ class SubscriptionSerializer(DynamicModelSerializer):
|
||||
fields = ("uuid", "name", "rss_url", "image", "server", "creation_datetime")
|
||||
|
||||
|
||||
class SubscriptionChannelSerializer(DynamicModelSerializer):
|
||||
class SubscriptionChannelSerializerGET(DynamicModelSerializer):
|
||||
"""
|
||||
Serializer for the SubscriptionChannel Model.
|
||||
This serializer should be used with GET requests.
|
||||
"""
|
||||
|
||||
# subscription = serializers.PrimaryKeyRelatedField(queryset=Subscription.objects.all())
|
||||
subscription = SubscriptionSerializer(read_only=True)
|
||||
subscription = SubscriptionSerializer()
|
||||
|
||||
class Meta:
|
||||
model = SubscriptionChannel
|
||||
fields = ("uuid", "id", "subscription", "creation_datetime")
|
||||
|
||||
|
||||
class SubscriptionChannelSerializerPOST(DynamicModelSerializer):
|
||||
"""
|
||||
Serializer for the SubscriptionChannel Model.
|
||||
This serializer should be used with POST requests.
|
||||
"""
|
||||
|
||||
subscription = serializers.PrimaryKeyRelatedField(queryset=Subscription.objects.all())
|
||||
|
||||
class Meta:
|
||||
model = SubscriptionChannel
|
||||
|
@ -11,7 +11,12 @@ from rest_framework.authentication import SessionAuthentication, TokenAuthentica
|
||||
from rest_framework.parsers import MultiPartParser, FormParser
|
||||
|
||||
from apps.home.models import Subscription, SubscriptionChannel, TrackedContent
|
||||
from .serializers import SubscriptionSerializer, SubscriptionChannelSerializer, TrackedContentSerializer
|
||||
from .serializers import (
|
||||
SubscriptionSerializer,
|
||||
SubscriptionChannelSerializerGET,
|
||||
SubscriptionChannelSerializerPOST,
|
||||
TrackedContentSerializer
|
||||
)
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -95,13 +100,19 @@ class SubscriptionChannel_ListView(generics.ListCreateAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
pagination_class = DefaultPagination
|
||||
serializer_class = SubscriptionChannelSerializer
|
||||
# serializer_class = SubscriptionChannelSerializer
|
||||
queryset = SubscriptionChannel.objects.all().order_by("-creation_datetime")
|
||||
|
||||
filter_backends = [rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||
filterset_fields = ["uuid", "id", "subscription", "subscription__server"]
|
||||
ordering_fields = ["creation_datetime"]
|
||||
|
||||
def get_serializer(self, *args, **kwargs):
|
||||
if self.request.method == "POST":
|
||||
return SubscriptionChannelSerializerPOST(*args, **kwargs)
|
||||
else:
|
||||
return SubscriptionChannelSerializerGET(*args, **kwargs)
|
||||
|
||||
def post(self, request):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
@ -116,6 +127,11 @@ class SubscriptionChannel_ListView(generics.ListCreateAPIView):
|
||||
exception=True
|
||||
)
|
||||
|
||||
# Switch to the GET serializer for return data, as it contains more data on the subscription.
|
||||
# We can't modify the POST serializer to contain this data, otherwise it expects it in POST.
|
||||
self.request.method = "GET"
|
||||
serializer = self.get_serializer(serializer.instance)
|
||||
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
@ -131,7 +147,7 @@ class SubscriptionChannel_DetailView(generics.RetrieveDestroyAPIView):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
parser_classes = [MultiPartParser, FormParser]
|
||||
|
||||
serializer_class = SubscriptionChannelSerializer
|
||||
serializer_class = SubscriptionChannelSerializerGET
|
||||
queryset = SubscriptionChannel.objects.all().order_by("-creation_datetime")
|
||||
|
||||
def post(self, request):
|
||||
|
Loading…
x
Reference in New Issue
Block a user