У меня нет опыта в Django, и мне нужна помощь. Я попытался переопределить метод save()
, чтобы генерация QR-кода и последующее сохранение происходили вместе с ним.
Однако, когда я сохраняю запись в папке мультимедиа, я получаю два файла.
Файл "17.png"
состоит поля "слаг" модели и расширения. Файл создается после выполнения этой строки:
self.qr.save(self.slug+'.png', BytesIO(qr), save=False)
Имя другого файла создается самим Django (после создания первого файла) и сохраняет его в поле «qr» модель. Как сделать так, чтобы был создан только один файл (только "10.png"
) и он сохранен в поле?
models.py
class Url(models.Model):
slug = models.CharField(max_length=50, unique=True)
qr = models.FileField(upload_to='', blank=True, null=True)
def save(self, *args, **kwargs):
qr = self.qr_generate(self.slug)
self.qr.save(self.slug+'.png', BytesIO(qr), save=False)
super(Url, self).save(*args, **kwargs)
def __str__(self):
return self.slug
@staticmethod
def qr_generate(slug):
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data("somedata" + str(slug))
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
qrByte = BytesIO()
img.save(qrByte)
return qrByte.getvalue()
Обновить
Найдено ошибка в моем коде. Я также переопределил метод form_valid и дважды вызвал save (). В итоге убрали один вызов и стало нормально, код выше работает