Django, создание файла qrcode.png для нового экземпляра в signals.py
Я хочу создать файл qrcode.png и сохранить его в ведро S3 после создания экземпляра в models.Model (с помощью signals.py). С помощью моего кода ниже мне удалось создать файл qrcode__png в локальном базовом каталоге, но он не загружается в мое внешнее ведро S3 и не сохраняется в классе models.Model. ПОМОГИТЕ! Спасибо. Signals.py
@receiver(post_save,sender=inventory)
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)