每个用户自动增加django模型字段

时间:2015-11-25 17:08:14

标签: django django-models model field auto-increment

我有这个型号:

class Invoice(models.Model):
    owner  = models.ForeignKey(settings.AUTH_USER_MODEL)
    data   = models.TextField(default=None, blank=True, null=True)
    number = models.PositiveIntegerField(default=0, null=False)

我需要为每个分离的用户自动增加字段number。理由是每个用户都有一个Invoice列表,从number=1number=latest.number+1

我知道F()个表达式,但无法弄清楚如何为每个特定用户引用最新/最大number。可能Invoice.objects.filter(owner=request.user).aggregate(Max('number'))是路径,但我如何确保Max()F()之间没有竞争条件?

2 个答案:

答案 0 :(得分:0)

您可以通过覆盖模型中的save方法并将自定义逻辑写入其中来实现此功能和类似功能。

class Invoice(models.Model):
    owner  = models.ForeignKey(settings.AUTH_USER_MODEL)
    data   = models.TextField(default=None, blank=True, null=True)
    number = models.PositiveIntegerField(default=0, null=False)

    def save(self, *args, **kwargs):
        if self.pk:
            self.number += 1
        # Write all your logic here, like handeling max value etc
        return super(Invoice, self).save(*args, **kwargs)

答案 1 :(得分:0)

你可以像这样得到你的第一个或最后一个对象:

# For last Object
Model.objects.latest('field') # Field can be id or pk or ...

# For first Object
Model.objects.all().first() # You can also use it on filter