Как я могу поместить пустой файл в платформу Django rest

#django #database #serialization #django-rest-framework #model

Вопрос:

Я использую фреймворк Django rest. Моя проблема в том, что я могу успешно опубликовать изображение, но я хочу опубликовать пустое изображение, используя только метод put. Ниже приведен мой код:

 My models.py file


class Blog(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.TextField(max_length = 50)
    author = models.TextField(max_length = 50)
    description = models.TextField()
    date = models.DateField(auto_now=True)
    time = models.TimeField(default=timezone.now)
    image = models.FileField(null=True, verbose_name="")
    user = models.ForeignKey(User, on_delete=models.CASCADE)

My serializers.py file

class BlogSerializer(serializers.ModelSerializer):
    title = serializers.CharField(max_length=128,  required=True, error_messages={'blank': "Please provide title"} )
    author = serializers.CharField(max_length=128, required=True, error_messages={'blank': "Please provide author"})
    description = serializers.CharField(max_length=128,  required=True, error_messages={'blank': "Please provide description"})
    image = serializers.FileField(required=False, error_messages={'invalid': "Please upload Image, Video or Audio file"})
    # user_id = serializers.SerializerMethodField('get_user_id')
    id = serializers.SerializerMethodField('get_id')
    date = serializers.SerializerMethodField('get_date')
    time = serializers.SerializerMethodField('get_time')

    
    class Meta:
        model = Blog
        # fields = ["id","title","author","description","image","date","time","user_id",]
        fields = ["id","title","author","description","image","date","time",]
    # Adding additional fields to a modelserializer using SerializerMethodField
    def get_user_id(self, user_id):
            user_id = self.context['request'].user.id
            return user_id
    def get_id(self, blog):
        id = blog.id
        return id
    def get_date(self, blog):
        date = blog.date
        return date
    def get_time(self, blog):
        time = blog.time
        return time

My views.py file

@api_view(['PUT'])
# @csrf_exempt
@authentication_classes([SessionAuthentication, BasicAuthentication])
@permission_classes([IsAuthenticated])
def update_blog(request, id):
    try:
        blog = Blog.objects.get(id=id)
    except Blog.DoesNotExist:
        return Response(status=404)
    if blog.user_id != request.user.id:
        return Response({'response':'You do not have permission to update that'})
    
    if request.method == 'PUT':
        # if len(blog.image) > 0:
        #     os.remove(blog.image.path)
        serializer = BlogSerializer(blog, context={'request': request}, data=request.data)
        if serializer.is_valid():
            serializer.save()
            data = {'result':'success', 'message':'Blog post updated successfully'}
            return Response(data=data, status=200)
        elif not serializer.is_valid():
            data = { 'result': 'error', 'message':serializer.errors}
            return Response(data=data)
 

Я могу успешно опубликовать пустое изображение, когда я использую метод put, я не смог поместить пустой файл в базу данных. Я хочу поместить пустой файл, используя только метод put.

Комментарии:

1. Когда я передаю allow_null=True в сериализаторе полей файлов, это решило мою проблему, спасибо

Ответ №1:

 image = serializers.FileField(..., blank=True, null=True)
 

Позволит им быть пустыми в бд и пустыми в формах

Комментарии:

1. Когда я передаю allow_null=True в сериализаторе полей файлов, это решило мою проблему, спасибо хенти