Python Django Rest框架序列化器模型带有参数的自定义方法
序列化程序字段是否可以使用带有参数的模型自定义方法作为其源?比如: models.pyPython Django Rest框架序列化器模型带有参数的自定义方法,python,django,django-rest-framework,Python,Django,Django Rest Framework,序列化程序字段是否可以使用带有参数的模型自定义方法作为其源?比如: models.py class Sample(models.Model): name = models.CharField(max_length=100, default=None) def sample_method(self, param): if param == 'x': return 1 elif param == 'y':
class Sample(models.Model):
name = models.CharField(max_length=100, default=None)
def sample_method(self, param):
if param == 'x':
return 1
elif param == 'y':
return 0
序列化程序.py
class SampleSerializer(serializers.ModelSerializer):
x = # serializer field that returns sample_method custom method with a parameter of 'x'
y = # serializer field that returns sample_method custom method with a parameter of 'y'
class Meta:
model = Sample
fields = ('x', 'y')
它应该返回类似以下内容的响应:
{'x': 1, 'y': 0}
如果值x
和y
是静态的,您可以尝试使用以下选项:
模型
串行器
另一种可能的方法是在模型本身上创建两个单独的属性(使用值x
或y
显式调用sample\u方法
),并将名称用作序列化程序中的字段。例如:
模型
串行器
实际上,有没有一种方法可以将参数放在actualy Serializer Method Field属性上?不太可能,值是
x
还是y
动态的?这些值是否存储在某个地方,如果是,那么您可以尝试在方法中检索值,而不是将其传递给该方法。如果是这样,那么我必须接受您的第一个建议,我实际上是在尝试覆盖sample_方法上的值,以便在我的自定义方法上应用DRY原则。因为我有三个自定义的模型方法,它们彼此有点相同,我可以把它们裁剪成一个,只需要参数
class Sample(models.Model):
name = models.CharField(max_length=100, default=None)
def sample_method(self, param):
if param == 'x':
return 1
elif param == 'y':
return 0
class SampleSerializer(serializers.ModelSerializer):
x = SerializerMethodField()
y = SerializerMethodField()
class Meta:
model = Sample
fields = ('x', 'y')
def get_x(self, obj):
return obj.sample_method('x')
def get_y(self, obj):
return obj.sample_method('y')
class Sample(models.Model):
name = models.CharField(max_length=100, default=None)
def sample_method(self, param):
if param == 'x':
return 1
elif param == 'y':
return 0
@property
def x(self):
return self.sample_method('x')
@property
def y(self):
return self.sample_method('y')
class SampleSerializer(serializers.ModelSerializer):
class Meta:
model = Sample
fields = ('x', 'y')