【发布时间】:2020-11-23 11:28:30
【问题描述】:
我正在尝试在序列化程序中将图像字段设为可选。但它仍然没有使图像字段成为可选的。我的代码如下:
图片上传文件管理类:
class FileManager:
@staticmethod
def photo_path(instance, filename):
basefilename, file_extension = os.path.splitext(filename)
date = datetime.datetime.today()
uid = uuid.uuid4()
if isinstance(instance, User):
return f'profile_pic/{instance.email}/{uid}-{date}{file_extension}'
elif isinstance(instance, BlogPost):
print(file_extension)
return f'blog_pic/{instance.author.email}/{uid}-{date}{file_extension}'
我的模型类:
class BlogPost(models.Model):
'''
Manage Blog Posts of the user
'''
author = models.ForeignKey(get_user_model(),
on_delete=models.DO_NOTHING,
related_name='blog_author')
content = models.TextField(max_length=600, blank=True, null=True)
content_image = models.FileField(upload_to= FileManager.photo_path, null=True, blank=True)
is_approved = models.BooleanField(default=False)
updated_on = models.DateTimeField(auto_now_add=True)
timestamp = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
super(BlogPost, self).save(*args, **kwargs)
img = Image.open(self.content_image.path)
if img.height > 600 or img.width > 450:
output_size = (600, 450)
img.thumbnail(output_size)
img.save(self.content_image.path)
我的序列化程序类:
class BlogPostUserSerializer(serializers.HyperlinkedModelSerializer):
'''
Will be serializing blog data
'''
author = UserListSerializer(read_only=True)
content = serializers.CharField(required=False)
content_image = serializers.ImageField(required=False, max_length=None, allow_empty_file=True, use_url=True)
class Meta:
model = BlogPost
fields = (
'url',
'id',
'content',
'content_image',
'author')
def validate(self, data):
if not data.get('content') and not data.get('content_image'):
raise serializers.ValidationError({'message':'No-content or Content image were provided'})
return data
错误文本:
/forum/write-blog 处的 ValueError
“content_image”属性没有与之关联的文件。
我已经浏览了 Django Rest Framework 的 Doc,但没有任何帮助。甚至其他人的answers 也无法正常工作,请帮帮我。
【问题讨论】:
标签: django django-rest-framework django-serializer