扩展django.rest_framework.serializers.ModelSerializer到模型属性字段?

时间:2020-07-24 19:17:22

标签: django django-rest-framework

我正在使用此序列化程序查询并返回一些json对象。

class MyModelPathSerializer(serializers.ModelSerializer):
  class Meta():
    model = MyModel
    fields = ('setup', 'path')
    depth=1

虽然返回模型的属性而不是字段很有趣。

class MyModel(models.Model):
    setup = models.ForeignKey(Setup, on_delete=models.CASCADE)

    @property
    def path(self):
         return '/some/path/'

是否可以修改序列化程序类,以便还返回属性?

1 个答案:

答案 0 :(得分:1)

您可以使用SerializerMethodField返回模型实例的属性。这是一个只读字段。

class MyModelPathSerializer(serializers.ModelSerializer):
    path = serializers.SerializerMethodField()

    class Meta:
        model = MyModel
        fields = ("setup", "path")
        depth = 1

    def get_path(self, model_instance):
        return model_instance.path

https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield