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

car*_*cio 9 django field model django-models 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)
Run Code Online (Sandbox Code Playgroud)

我需要的是number为每个分离的用户自动增加字段。基本原理是每个用户都有一个Invoicenumber=1到的列表number=latest.number+1

我确实了解F()表达式,但无法弄清楚如何number为每个特定用户引用最新/最好的。也许Invoice.objects.filter(owner=request.user).aggregate(Max('number'))是路径,但是我如何确保Max()和 之间没有竞争条件F()

ele*_*oet 0

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

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)
Run Code Online (Sandbox Code Playgroud)