首页 > 解决方案 > 保存缩略图图像路径 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

标签: djangopython-3.x

解决方案


推荐阅读