每个用户自动增加Django模型字段 [英] Auto increment django model field per user

查看:57
本文介绍了每个用户自动增加Django模型字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个模型:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆