Метод свойства и другие методы в моделях django
Я время от времени использую метод свойства и понимаю его назначение. По сути, он действует так же, как поле, но без фактического создания столбца в db, и к нему можно легко получить доступ в сериализаторе как к полям модели. Но как можно получить доступ к другим методам, подобно этой функции baby_boomer модели Person, приведенной ниже? Как к ней можно получить доступ в сериализаторе, а также в представлении или наборе запросов?
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"
@property
def full_name(self):
"Returns the person's full name."
return '%s %s' % (self.first_name, self.last_name)
Передайте параметр source в поле сериализатора для доступа к методу на модели, метод должен принимать только один параметр self
class PersonSerializer(serializers.ModelSerializer):
foo = serializers.CharField(source='baby_boomer_status', read_only=True)
class Meta:
model = Person
fields = ['field_a', 'field_b']