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)