Django, доступ к методам модели - PullRequest
0 голосов
/ 19 июня 2020

В документации Django они рекомендуют писать бизнес-логи c в модели.

Как слой или набор запросов получают доступ к методам в модели?

Как показано в примере в документация (https://docs.djangoproject.com/en/3.0/topics/db/models/)

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    birth_date = models.DateField()

    def baby_boomer_status(self):
        "Returns the person's baby-boomer status."
        import datetime
        if self.birth_date < datetime.date(1945, 8, 1):
            return "Pre-boomer"
        elif self.birth_date < datetime.date(1965, 1, 1):
            return "Baby boomer"
        else:
            return "Post-boomer"

Как получить доступ к слою представления baby_boomer_status?

У меня есть небольшой опыт разработки Django, но я использовал писать логику в самом View.

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Вы можете перебирать QuerySet и вызывать метод модели как

for person in Person.objects.all():
    print(person.baby_boomer_status())

Если у вас есть единственный объект, просто вызовите метод напрямую как,

print(Person.objects.get(pk=123).baby_boomer_status())
1 голос
/ 19 июня 2020

Это можно сделать, просто вызвав функцию. Например,

>>> from .models import Person
>>> person = Person.objects.get(id=1) # Remember getting the person object
>>> person.baby_boomer_status()

Вы должны сначала получить объект человека, иначе он вернет саму функцию, например

>>> from .models import Person
>>> person.baby_boomer_status()
>>> <function AppName.models.Person.baby_boomer_status(self)>
1 голос
/ 19 июня 2020

Вы можете просто вызвать метод экземпляра человека:

person = Person.objects.get(id=1)
print(person.baby_boomer_status())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...