django,为signals.py中的新实例创建qrcode.png文件



我想创建一个qrcode.png文件,并在模型中创建实例后将其存储在我的S3桶中。模型(使用signals.py)。使用下面的代码,我设法在本地基本目录中创建了qrcode__png文件,但它没有上传到我的外部S3桶或保存在我的模型中。模型类。的帮助!谢谢。Signals.py

@receiver (postrongave,发送方=库存)

def create__url_qr(sender, instance, created, **kwargs):

if created == True:
qr = qrcode.QRCode(
version=1,
box_size=10,
border=5)
qr.add_data('/MyProperty/item/'+str(instance.id))
qr.make(fit=True)
im=qr.make_image(fill_color="black", back_color="white")
im.save('qrcode___'+str(instance.id)+'.png', format="png")
print('XXXX')
print(im)
print('XXXX')
inst1 = inventory.objects.get(pk=instance.pk)        
inst1.qr_code = im
inst1.save() 

您可以读取您写入django.core.files.File对象的文件,然后将该对象保存到您的模型

import qrcode
from django.core.files import File
qr = qrcode.QRCode(
version=1,
box_size=10,
border=5,
)
qr.add_data('/MyProperty/item/'+str(instance.id))
qr.make(fit=True)
im = qr.make_image(fill_color="black", back_color="white")
im.save('qrcode___'+str(instance.id)+'.png', format="png")
qr_file = File(open('qrcode___'+str(instance.id)+'.png'))
inst1 = inventory.objects.get(pk=instance.pk)
inst1.qr_code.save('qrcode___'+str(instance.id)+'.png', qr_file)

但你不必先在本地保存,你可以直接写入BytesIO然后保存

import qrcode
from io import BytesIO
from django.core.files import File
qr = qrcode.QRCode(
version=1,
box_size=10,
border=5,
)
qr.add_data('/MyProperty/item/'+str(instance.id))
qr.make(fit=True)
im = qr.make_image(fill_color="black", back_color="white")
stream = BytesIO()
im.save(stream, format="png")
qr_file = File(stream)
inst1 = inventory.objects.get(pk=instance.pk)
inst1.qr_code.save('qrcode___'+str(instance.id)+'.png', qr_file)

最新更新