【发布时间】:2016-02-28 14:14:48
【问题描述】:
我有这个模型:
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=1 到number=latest.number+1。
我确实知道F() 表达式,但不知道如何为每个特定用户引用最新/最大的number。也许Invoice.objects.filter(owner=request.user).aggregate(Max('number')) 是路径,但我如何确保Max() 和F() 之间没有竞争条件?
【问题讨论】:
-
您使用的是哪个数据库?
-
@Alasdair Postgres 9.4
-
@MTaqi 无论发票属于哪个用户,自动递增字段都会递增。我需要能够为所有用户拥有 Invoice.number=1。想想您自己的电信发票编号:它从 1 开始并递增,直到您致电取消每个客户的服务。
-
有
models.PositiveIntegerField(auto_increment_for('owner'))这样的东西会很好 -
为什么没有日期字段,它会告诉您每个用户的最新发票。
标签: django django-models model field auto-increment