如何一次生成条码 [英] how to generate barcode once
本文介绍了如何一次生成条码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个问题,我在模型文章中为字段条码生成条码
barcode=models.ImageField(upload_to=‘article/codes’,空白=真)
第一次插入新对象时,它会正常保存,但当我更新它时,应用程序会生成新的条形码,我如何才能让它只丢弃一次?
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)
推荐答案
编辑您的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
块中的代码仅在创建实例时执行。
这篇关于如何一次生成条码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文