Dea*_*ada 3 python django django-rest-framework
序列化器字段是否可以使用模型的自定义方法,并将参数作为其来源?就像是:
模型.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':
return 0
Run Code Online (Sandbox Code Playgroud)
序列化程序.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')
Run Code Online (Sandbox Code Playgroud)
它应该作为响应返回类似于:
{'x': 1, 'y': 0}
Run Code Online (Sandbox Code Playgroud)
SerializerMethodField
如果值x
和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
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
另一种可能的方法是在模型本身上创建两个单独的属性(sample_method
使用值x
或显式调用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')
Run Code Online (Sandbox Code Playgroud)
class SampleSerializer(serializers.ModelSerializer):
class Meta:
model = Sample
fields = ('x', 'y')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4659 次 |
最近记录: |