django - 保存缩略图图像路径 django python
问题描述
我正在生成缩略图,当我从管理员和 api 上传时,我想将图像路径保存到数据库:
class Image(models.Model):
license_type = (
('Royalty-Free','Royalty-Free'),
('Rights-Managed','Rights-Managed')
)
image_number = models.CharField(default=random_image_number,max_length=12,unique=True)
title = models.CharField(default=random_image_number,max_length = 100)
image = models.ImageField(upload_to = 'image' , default = 'demo/demo.png')
thumbnail = models.ImageField(upload_to='thumbs')
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.CASCADE)
shoot = models.ForeignKey(ImageShoot, on_delete=models.CASCADE, related_name='Image', null=True,blank=True)
image_keyword = models.TextField(max_length=1000)
credit = models.CharField(max_length=150, null=True)
location = models.CharField(max_length=100, null=True)
license_type = models.CharField(max_length=20,choices=license_type, default='')
uploaded_at = models.TimeField(auto_now_add=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
if not self.make_thumbnail():
raise Exception('Could not create thumbnail - is the file type valid?')
def make_thumbnail(self):
fh = storage.open(self.image.path)
image = PILImage.open(fh)
image.thumbnail((400,400),PILImage.ANTIALIAS)
fh.close()
thumb_name, thumb_extension = os.path.splitext(self.image.path)
thumb_extension = thumb_extension.lower()
thumb_filename = thumb_name + '_thumb' + thumb_extension
temp_thumb = BytesIO()
image.save(temp_thumb, FTYPE)
temp_thumb.seek(0)
self.thumbnail.save(thumb_filename, ContentFile(temp_thumb.read()), save=True)
temp_thumb.close()
return True
如果我们从管理员上传图片
管理员.py:
@admin.register(Image)
class ImageAdmin(admin.ModelAdmin):
readonly_fields=['image_number','uploaded_at']
fields = ['title','image_number','shoot','category',
'image','image_keyword','thumbnail','credit','license_type','location','uploaded_at']
这是我对 api 的看法,目前只是上传没有缩略图的批量图像我如何从中创建缩略图:
视图.py:
class EventImageUploadView(APIView):
def post(self, request,category):
#title = forms.CharField(max_length = 100)
file = request.data['file']
data={
'image':file,
'category_id':category
}
EventsImage.objects.create(**data)
return JsonResponse(json.dumps({'message': "Uploaded"}), status=200, safe=False)
我收到此错误并生成多个图像我不知道导致递归的原因:
maximum recursion depth exceeded in comparison
回溯:
File "/home/tboss/Desktop/environment/live/backend/venv/lib/python3.7/site-packages/PIL/TiffImagePlugin.py", line 319, in __init__
if isinstance(value, Fraction):
File "/home/tboss/Desktop/environment/live/backend/venv/lib/python3.7/abc.py", line 139, in __instancecheck__
return _abc_instancecheck(cls, instance)
RecursionError: maximum recursion depth exceeded in comparison
解决方案
推荐阅读
- vb.net - Visual Basic 中的简单银行应用程序
- postgresql - Docker:postgres与节点之间没有连接
- c++ - 使用 ssh 重新连接到远程 Ubuntu 机器后,如何继续使用 gdb 调试 c++ 代码?
- mysql - 如何使用我的 sql 中具有“日期格式”的列按“月份”排序?
- prolog - Prolog中列表中的重复和双倍元素
- python - Dash,如何根据单击的按钮进行回调?
- mysql - 尝试导入大型 sql 数据库文件时,DBeaver mysql 中出现错误
- python - 在 django 视图中使用时间戳范围过滤错误
- discord.js - 查找服务器的前 300 个成员
- named-pipes - Node.js 命名管道 C#