属性 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']
我一直在不时地使用属性方法并了解它的用途。它基本上与字段相同,但实际上没有在数据库中创建列,并且可以在序列化程序中作为模型字段轻松访问。但是如何像下面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']