根据其他字段在 Serializer 中添加一个字段:django
Add a field in Serializer depending on other field : django
我有一个序列化器:
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
return status_code
class Meta:
model = models.Order
fields = ('client_code', 'status', 'order_id', 'details')
在这个 seriliazer 中,我想添加一个名称为 cancel_reason
的字段,只有在值为 status == 5
.
时才应添加该字段
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
if status_code == 5:
# this felt dumb but had to try!
cancel_reason = serializers.SerializerMethodField()
return status_code
def get_cancel_reason(self, obj):
return "Dummy-reason"
class Meta:
model = models.Order
fields = ('client_code', 'status', 'order_id', 'details')
^This Doesn't work
请为这个用例提出 SerializerMethodField
的解决方案或替代方案。非常感谢!
你可以这样做
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
if status_code == 5:
self.fields['cancel_reason'] = serializers.SerializerMethodField()
return status_code
如前所述here关于如何在序列化程序中添加动态字段
我有一个序列化器:
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
return status_code
class Meta:
model = models.Order
fields = ('client_code', 'status', 'order_id', 'details')
在这个 seriliazer 中,我想添加一个名称为 cancel_reason
的字段,只有在值为 status == 5
.
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
if status_code == 5:
# this felt dumb but had to try!
cancel_reason = serializers.SerializerMethodField()
return status_code
def get_cancel_reason(self, obj):
return "Dummy-reason"
class Meta:
model = models.Order
fields = ('client_code', 'status', 'order_id', 'details')
^This Doesn't work
请为这个用例提出 SerializerMethodField
的解决方案或替代方案。非常感谢!
你可以这样做
class aaaser(serializers.ModelSerializer):
client_code = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
def get_status(self, obj):
status_code = obj.status if obj.status else -1
if status_code == 5:
self.fields['cancel_reason'] = serializers.SerializerMethodField()
return status_code
如前所述here关于如何在序列化程序中添加动态字段