【问题标题】:how to generate barcode once如何一次生成条码
【发布时间】:2021-09-10 01:34:25
【问题描述】:

我有一个问题,我为模型文章中的字段条形码生成条形码

barcode=models.ImageField(upload_to='article/codes',blank=True)

第一次插入新对象时它正常保存,但是当我更新它时,应用程序会生成新的条形码,我怎样才能让它只删除一次?

models.py

from django.db import models
import random
from django.contrib.auth.models import User
import barcode
from barcode.writer import ImageWriter
from io import BytesIO
from django.core.files import File

`Status=(('0','Non'),('1','Oui'))
    
    class Article(models.Model):
        user= models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE)
        numero=models.IntegerField(blank=True)
        barcode=models.ImageField(upload_to='article/codes',blank=True)
        nom = models.CharField(max_length=20)
        quantity=models.IntegerField(null=True)
        categorie=models.ForeignKey(Categorie,on_delete=models.CASCADE)
        date_entree=models.DateField(null=True)
        prix_achat=models.IntegerField(null=True)
        statut=models.CharField(max_length=2,null=True,default='0',choices=Status)
        
    
        def __str__(self):
            return self.nom
        
        def save(self,*args, **kwargs):
            EAN =barcode.get_barcode_class('upc')
            # rend=str(random.randint(2055,99999))
            # print(r)
            r=self.categorie.id+self.user.id
            rr=self.categorie.id+self.date_entree.day+self.prix_achat
            ean=EAN(str(self.categorie.id)+str(self.user.id)+str(r)+str(self.date_entree.year)+str(self.date_entree.month)+str(self.date_entree.day)+'34',writer=ImageWriter())
            buffer =BytesIO()
            ean.write(buffer)
            self.numero=ean.__str__()
            self.barcode.save(str({self.nom})+'.png',
            File(buffer),save=False)
            return super().save(*args, **kwargs)
       
        

    

【问题讨论】:

    标签: django barcode


    【解决方案1】:

    编辑您的save 方法:

    def save(self, *args, **kwargs):
        if self._state.adding:
            EAN =barcode.get_barcode_class('upc')
            # rend=str(random.randint(2055,99999))
            # print(r)
            r = self.categorie.id + self.user.id
            rr = self.categorie.id + self.date_entree.day + self.prix_achat 
            ean = EAN(str(self.categorie.id) + str(self.user.id) + str(r) + str(self.date_entree.year) + str(self.date_entree.month) + str(self.date_entree.day) + '34',writer=ImageWriter())
            buffer = BytesIO()
            ean.write(buffer)
            self.numero = ean.__str__()
            self.barcode.save(str({self.nom})+'.png',
            File(buffer),save=False)
        return super().save(*args, **kwargs)
    

    if 块中的代码仅在创建实例时执行。

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2017-07-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多