Django - подсчитать, сколько объектов находится в 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))

Я пытаюсь получить количество всех объектов в таблице, чтобы передать его в 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)

Вы не можете получить количество записей в вашей базе данных, используя метод на самой модели, так как это относится только к текущему экземпляру класса, а не к вашей базе данных.

Примечание: В случае удаления записей вы можете получить дубликаты пропусков, так как подсчет может вернуть одну и ту же сумму < дважды

Вернуться на верх