【发布时间】:2022-11-09 23:41:02
【问题描述】:
我想知道如何使用 Celery 工作人员来处理文件上传。 所以我尝试在一个简单的类上实现它。 我覆盖了我的 ModelViewSet 中的创建类。 但显然 Django 的默认 json 编码器不会序列化 ImageFields (Lame)。 如果你们能告诉我如何解决这个问题,我将不胜感激。 这是我想出的:
序列化程序.py:
class ProductImageSerializer(serializers.ModelSerializer):
class Meta:
model = ProductImage
fields = ['id', 'image']
任务.py:
from time import sleep
from celery import shared_task
from .models import ProductImage
@shared_task:
def upload_image(product_id, image):
print('Uploading image...')
sleep(10)
product = ProductImage(product_id=product_id, image=image)
product.save()
视图.py:
class ProductImageViewSet(ModelViewSet):
serializer_class = ProductImageSerializer
def get_queryset(self):
return ProductImage.objects.filter(product_id=self.kwargs['product_pk'])
def create(self, request, *args, **kwargs):
product_id = self.kwargs['product_pk']
image = self.request.FILES['image']
image.open()
image_data = Image.open(image)
upload_image.delay(product_id, image_data)
return Response('Thanks')
这是包含我的 ImageField 的我的模型:
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images')
image = models.ImageField(upload_to='store/images', validators=[validate_image_size])
【问题讨论】:
标签: python json django redis celery