Как вызвать пользовательский менеджер моделей Django из представления на основе классов?

Я хочу использовать менеджер модели клиента, который манипулирует полем, но не сохраняет его в базе данных. Как мне вызвать функцию менеджера моделей под названием "with_counts()" в приведенном ниже примере кода.

Можно ли вызвать его из моего представления или моих шаблонов?

    LEVEL = [
        ('Pro', 'Professional'),
        ('Int', 'Intermediate'),
        ('OK', 'Competent')
    ]

    Languages = models.CharField(max_length=25)
    Years = models.IntegerField(default=1)
    Proficiency = models.CharField(max_length=15, choices=LEVEL, default="Competent")


    def __str__(self):
        return f'{self.Languages} Level: {self.Proficiency}'


    #Do not save to data base. 
    def with_counts(self):
        return self.years * 10;

Просто добавьте @property к вашей модели:

@property
def with_counts(self):
    return self.Years * 10;

Для более подробной информации смотрите https://docs.djangoproject.com/en/4.0/glossary/#term-property и https://docs.python.org/3/library/functions.html#property.

P.S. вы должны использовать имена полей модели в нижнем регистре.

Из docs:

Пользовательский метод Manager может возвращать все, что вы захотите. Он не обязательно должен возвращать QuerySet.

Так что в этом случае вы правы, вы можете просто вызвать это как обычную функцию в вашем представлении, как это:

views.py:

class your_view(View):
 def get(request, *args, **kwargs):
   counts = YourModal.objects.with_counts()
   # do something with counts

models.py:

class YourModel(models.Model):
  objects = models.YourManager()

managers.py:

class YourManager(models.Manager):
 def with_counts(self):
    return self.years * 10
Вернуться на верх