Задать вопрос
@Egegey

Django. Как правильно сохранить сгенерированный файл в FileField?

Привет!

Я крайне неопытен в Django и мне нужна помощь.
Я попытался переопределить метод save(), чтобы вместе с ним происходила генерация QR кода и последующее сохранение.
Однако при cохранении записи в папке media у меня появляются два файла.
5eb3e75b5416c152823951.png
Один файл ("10.png") состоит из поля slug модели и расширения.
Файл создаётся после выполнения этой строки:
self.qr.save(self.slug+'.png', BytesIO(qr), save=False)

Имя другого файла генерирует сам Django (уже после создания первого) и его же сохраняет в поле qr модели.

Как сделать так, чтобы создавался только один файл ( только "10.png") и в поле сохранялся именно он?

Model.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()
  • Вопрос задан
  • 1227 просмотров
Подписаться 2 Простой 1 комментарий
Ответ пользователя Вадим К ответам на вопрос (3)
Viji
@Viji
DevOps Engineer
А если убрать super(Url, self).save(*args, **kwargs) ?
Ответ написан