相对于前一个值,自动增加Django中的值

6 django auto-increment

有没有办法相对于前一个字段自动增加一个字段...例如,如果前一个记录的值为09-0001,那么下一个记录应该分配09-0002,那么一个......想法?我正在考虑覆盖保存方法,但我怎么不确定

Set*_*eth 8

Django不会让你在一个模型中拥有多个AutoField,并且你已经拥有一个主键.因此,您必须覆盖保存,并且可能需要回顾该表以确定要增加的内容.

像这样的东西:

class Product(models.Model): 
   code = models.IntegerField()
   number = models.IntegerField()
   ...

   def get_serial_number(self): 
      "Get formatted value of serial number"
      return "%.2d-%.3d" % (self.code, self.product)

   def save(self): 
      "Get last value of Code and Number from database, and increment before save"
      top = Product.objects.order_by('-code','-number')[0]
      self.code = top.code + 1
      self.number = top.number + 1
      super(Product, self).save()

   # etc.
Run Code Online (Sandbox Code Playgroud)

请注意,如果在save方法中没有某种锁定,则可能会遇到并发问题(两个线程试图在代码和数字中存储相同的值).

  • 修复并发问题你可以使用`top = Product.objects.select_for_update(nowait = True).order_by(' - code',' - number')[0] (3认同)