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 相同的数量 < 两次
我有一个非常简单的模型,包含以下详细信息:
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 相同的数量 < 两次