【问题标题】:How can I put an empty file in Django rest framework如何在 Django 休息框架中放置一个空文件
【发布时间】:2021-10-10 13:54:34
【问题描述】:

我正在使用 Django 休息框架。我的问题是我可以成功发布图像,但我只想使用 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 方法放置一个空文件。

【问题讨论】:

  • 当我在文件字段序列化程序中传递 allow_null=True 时,它​​解决了我的问题,谢谢

标签: django database serialization django-rest-framework model


【解决方案1】:
image = serializers.FileField(..., blank=True, null=True)

将允许它们在 db 中为空,在表单中为空

【讨论】:

  • 当我在文件字段序列化程序中通过 allow_null=True 时,它​​解决了我的问题,谢谢 henty
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 2013-04-08
  • 2021-11-26
  • 1970-01-01
  • 2015-02-25
  • 2016-04-25
相关资源
最近更新 更多