Python Django自动递增到自定义字段
我有Python Django自动递增到自定义字段,python,django,Python,Django,我有Productdb模型,每次添加新的Product时,它都会生成一个code class Product(models.Model): # Common code = models.CharField(_("Product Code"), blank=True, max_length=100) #... Other Fields def __str__(self): return self.code def custom_seq(pk,
Product
db模型,每次添加新的Product
时,它都会生成一个code
class Product(models.Model): # Common
code = models.CharField(_("Product Code"), blank=True, max_length=100)
#... Other Fields
def __str__(self):
return self.code
def custom_seq(pk, letters=4, digits=3):
"""
Generates a sequence when letters=4, digits=3 then, 'AAAA000', 'AAAA001', ..., 'ZZZZ999'
Generates a sequence when letters=3, digits=4 then, 'AAA0000', 'AAA0001',..., 'ZZZ9999'
"""
alpha_list = [string.ascii_uppercase]*letters
digit_list = [string.digits]*digits
for i in itertools.product(*alpha_list):
for j in itertools.product(*digit_list):
yield "".join(i + j)
def save(self, *args, **kwargs):
product_code = next(self.custom_seq())
print("Code", product_code) #-- prints `AAAA000`
if not self.code:
self.code = product_code
return super(Product, self).save(*args, **kwargs)
每次,我都会保存一个新的
产品
它只生成我的custom_seq()
的第一个序列,即AAAA000
。但它应该向每个新生成的实例添加新的code
,例如“AAAA001”、“AAAA002”、“AAAA003”…每次创建新实例时,您都在实例化自定义序列生成器
将您的custom_-seq(主键,字母=4,数字=3)
方法放在产品
模型之外的某个地方(我建议您单独放在实用程序
模块中),并全局实例化它
最后,在save方法中使用它
seq = custom_seq()
class Product(models.Model): # Common
code = models.CharField(_("Product Code"), blank=True, max_length=100)
#... Other Fields
#... Other methods
def save(self, *args, **kwargs):
if not self.code:
self.code = next(seq)
return super(Product, self).save(*args, **kwargs)