每个用户自动增加Django模型字段 [英] Auto increment django model field per user
问题描述
我有这个模型:
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
.理由是每个用户都有一个发票
列表,从 number = 1
到 number = latest.number + 1
.
What I need is to auto-increment the field number
for each separated user. The rationale is that each user has a list of Invoice
, starting from number=1
to number=latest.number+1
.
我确实了解 F()
表达式,但是无法弄清楚如何为每个特定用户引用最新/最大的 number
.也许 Invoice.objects.filter(owner = request.user).aggregate(Max('number'))
是路径,但是如何确保在 Max()
和 F()
?
I do known about F()
expressions, but can't figure out how to reference the latest/greatest number
for each specific user. Maybe Invoice.objects.filter(owner=request.user).aggregate(Max('number'))
is the path, but how do I ensure there is no race conditions between Max()
and F()
?
推荐答案
您可以通过覆盖模型中的save方法并向其中编写自定义逻辑来实现此功能和类似功能.
You can achieve this and similar functions by overriding save method in model and writing your custom logics to it.
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)
这篇关于每个用户自动增加Django模型字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!