属性 django模型中的方法和其他方法

property method and other methods in django models

我一直在不时地使用属性方法并了解它的用途。它基本上与字段相同,但实际上没有在数据库中创建列,并且可以在序列化程序中作为模型字段轻松访问。但是如何像下面Person模型的baby_boomer函数一样访问其他方法呢?如何在序列化程序以及视图或查询集中访问它?

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']