#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 в сериализаторе полей файлов, это решило мою проблему, спасибо хенти