Django - 计算自己有多少对象

Django - count how many objects are in self

我有一个非常简单的模型,包含以下详细信息:

class ExclusiveUser(models.Model):
    exclusivepass = models.CharField(max_length=4, primary_key=True, editable=False)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    date_of_birth = models.DateField(null=True)
    date_of_birth = models.DateField(null=True)
    age = models.IntegerField(editable=False)

    def save(self,*args, **kwargs):
        today = date.today()

        self.exclusivepass = exclusivepass_gen(self.exclusivepass.all().count())
        self.age = today.year - self.date_of_birth.year - ((today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day))

        super().save(*args, **kwargs)

exclusivepass_gen 是一种简单的 utils.py 方法,用于生成唯一的 exclusivepass

def exclusivepass_gen(pass_count):
    pass_next = 0
    pass_limit = 101

    if pass_count < pass_limit:
        pass_next = pass_count + 1

    return ('E' + "{:03d}".format(pass_next))

我正在尝试获取 table 中所有对象的计数以传递给 exclusivepass_gen 以生成下一个数字,但是当我这样做时出现以下错误: 'ExclusiveUser' object has no attribute 'all'

如何计算模型中要传递给 exclusivepass_gen 方法的所有对象?

您可以像这样在保存方法中查询数据库:

class ExclusiveUser(models.Model):
    exclusivepass = models.CharField(max_length=4, primary_key=True, editable=False)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    date_of_birth = models.DateField(null=True)
    date_of_birth = models.DateField(null=True)
    age = models.IntegerField(editable=False)

    def save(self,*args, **kwargs):
        today = date.today()

        # Get qs
        qs_passes = ExclusiveUser.objects.all().count()

        self.exclusivepass = exclusivepass_gen(qs_passes)
        self.age = today.year - self.date_of_birth.year - ((today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day))

        super().save(*args, **kwargs)

您无法使用模型本身的方法获取数据库的记录数,因为这仅指 class 的当前实例,而不是您的数据库。

注意:如果您删除记录,您最终可能会得到重复的通行证,因为计数可能 return 相同的数量 < 两次