Как вызвать пользовательский менеджер моделей 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