'images are not saved in media directory in Django project

I'm trying to upload a picture (with Postman at the moment) and save it in the "media" directory but although the server returns 200 status code, nothing's saved in the project.

urls.py:

urlpatterns = [
    path('users/sign-up', views.RegisterAPI.as_view()),
    path('users/login', views.LoginAPI.as_view()),
    path('users/<int:id>', views.UserProfile.as_view()),
    path('users/<int:id>/bill', views.UploadPicture.as_view()),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

models.py:

class UserBill(models.Model):
    bill_picture = models.ImageField(default='bill_pic', null=True, blank=True)
    sender = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user')
    created_at = models.DateTimeField(auto_now=True, auto_now_add=False)
    status = models.IntegerField(null=True)

views.py:

class UploadPicture(generics.GenericAPIView):
    permission_classes = [IsAuthenticated, IsAccountOwner]

    def post(self, request, *args, **kwargs):
        new_data = request.data
        new_data['user'] = request.user.id
        new_data['status'] = PaymentStat.PENDING.value

        serializer = UserBillSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        bill = serializer.save()
        return Response({
            "bill": UserBillSerializer(bill, context=self.get_serializer_context()).data,
        }, status=status.HTTP_200_OK)

serializers.py

class UserBillSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserBill
        fields = '__all__'

    def create(self, validated_data):
        user = User.objects.all().get(id=self.initial_data.get('user'))
        bill = UserBill.objects.create(**validated_data, sender=user)
        return bill

    def update(self, instance, validated_data):
        obj = super().update(instance, validated_data)
        obj.is_regular = True
        obj.save()
        return obj


Solution 1:[1]

I still don't understand why this isn't working, but I tried an alternative approach and it worked.

Now, I create the new UserBill in 2 steps:

1- I send a POST request to the server, including all the data I want to be saved for the new bill, except the picture itself.

2- I send a PUT request including only the picture and edit the bill created in the previous step.

Hope it helps you too.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Masih Bahmani