首页 > 解决方案 > 条形码图像文件中的最后一位不匹配,django

问题描述

我有一个模型,其中produc_attr存储在CharField(字符串)中。使用该get_code方法,我将字符串转换为product_attr数字(13 位),显示在我的code_number专栏中。接下来,我将通过该get_barcode方法生成条形码图像。问题是:条形码PNG(图像)文件上的数字错误。也就是说,总共 13 位数字中的最后一个数字是增加或减少的,我通过在表格末尾添加一列 (printed_number) 来显示这一点。任何帮助,将不胜感激。

class Inventory(models.Model):
    product          = models.ForeignKey('Product', blank=True, null=True, on_delete=models.SET_NULL)
    product_attr     = models.CharField(max_length=50, blank=True, null=True)
    code_number      = models.CharField(max_length = 13, blank=True, editable=False)
    barcode          = models.ImageField(upload_to = 'barcode/', blank=True)

    def __str__(self):
        return self.product

    def get_code_number(self):
        str1 = self.product_attr.encode()
        hash1 = hashlib.sha1()
        hash1.update(str1)
        return  str(int(hash1.hexdigest(), 16))[:13]

    def get_barcode(self):
        EAN = barcode.get_barcode_class('ean13')
        ean = EAN(f'{self.code_number}', writer=ImageWriter())
        buffer = BytesIO()
        ean.write(buffer)
        return self.barcode.save('barcode.png', File(buffer), save=False)

    def save(self, *args, **kwargs):
        self.code_number        = self.get_code_number()
        self.get_barcode()
        super(Inventory, self).save(*args, **kwargs)

在此处输入图像描述

标签: pythondjangobarcode

解决方案


您必须更改保存方法。将生成的 ean 编号存储在您的code_number字段中:

self.code_number=ean

推荐阅读