【发布时间】:2020-08-22 19:23:26
【问题描述】:
我对 Django 缺乏经验,需要帮助。我试图覆盖 save() 方法,以便 QR 码生成和随后的保存随之发生。
但是,当我将条目保存在媒体文件夹中时,我得到了两个文件。
"17.png" 文件由模型的“slug”字段和扩展名组成。执行此行后创建文件:
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() 两次。 结果去掉了一个调用就正常了,上面的代码就可以了
【问题讨论】: