I am writing the create
function in postViewset
, specifically I want to create an article, I can upload both photos or videos, but when testing the postman, the result is still created, however, then it Media
is empty, I try print (media_image_request)
and print(media_video_request)
the result is []
. Please help me fix this error in the function create
and the partial_update
.
class PostViewSet(viewsets.ViewSet,
generics.ListAPIView,
generics.RetrieveDestroyAPIView):
queryset = Post.objects.filter(is_active=True).order_by('-created_date').all()
parser_classes = [parsers.MultiPartParser, ]
permission_classes = [permissions.IsAuthenticated()]
pagination_class = paginators.PostPaginator
def get_permissions(self):
if self.action in ['partial_update']:
return [perms.PostOwner()]
elif self.action in ['destroy']:
return [perms.PostOwner() or permissions.IsAdminUser()]
return self.permission_classes
def get_serializer_class(self):
if self.action.__eq__('retrieve'):
return serializers.AuthenticatedDetailPostSerializer
return serializers.PostSerializer
def get_queryset(self):
queryset = self.queryset
if self.action.__eq__('list'):
user_id = self.request.query_params.get("userId")
if user_id:
queryset = queryset.filter(user_id=user_id)
return queryset
def create(self, request):
content = request.data.get('content')
user = request.user
post = Post.objects.create(user=user, content=content)
media_image_request = request.FILES.getlist('media_image')
media_video_request = request.FILES.getlist('media_video')
for media_file in media_image_request:
Media.objects.create(file=media_file, type=Media.MEDIA_TYPES.IMAGE, post=post)
for media_file in media_video_request:
Media.objects.create(file=media_file, type=Media.MEDIA_TYPES.VIDEO, post=post)
response_data = serializers.AuthenticatedDetailPostSerializer(post, context={'request': request}).data
return Response(response_data, status=status.HTTP_201_CREATED)
def partial_update(self, request, pk):
post = self.get_object()
for k, v in request.data.items():
if k not in ['media_image', 'media_video', 'delete_media_ids']:
setattr(post, k, v)
post.save()
delete_media_ids = request.data.get('delete_media_ids', "")
if delete_media_ids:
delete_media_ids_list = [int(id.strip()) for id in delete_media_ids.split(",")]
Media.objects.filter(id__in=delete_media_ids_list, post=post).delete()
media_image_request = request.FILES.getlist('media_image')
media_video_request = request.FILES.getlist('media_video')
for media_file in media_image_request:
Media.objects.create(file=media_file, type=Media.MEDIA_TYPES.IMAGE, post=post)
for media_file in media_video_request:
Media.objects.create(file=media_file, type=Media.MEDIA_TYPES.VIDEO, post=post)
response_data = serializers.AuthenticatedDetailPostSerializer(post, context={'request': request}).data
return Response(response_data)
1