【问题标题】:Django REST Framework: serializing a model from callable to primary keyDjango REST Framework:将模型从可调用序列化为主键
【发布时间】:2013-08-23 10:07:36
【问题描述】:

我有一个如下所示的序列化程序:

class FooSerializer(serializers.ModelSerializer):
    barid = serializers.IntegerField(source='get_bar')

    class Meta:
        model = Foo
        fields = ('id', 'barid',)

可调用的get_bar 返回一个Bar 对象。我希望FooSerializer 的序列化输出简单地将barid 映射到返回的Bar 对象的主键。然而,当我运行上述代码时,返回的是 Bar 对象的 unicode 表示。

如何取回主键整数?谢谢。

【问题讨论】:

  • 以下也可以解决问题barid = serializers.Field(source='get_bar.id')。请注意,如果serializers.Field 是只读字段,则可以只使用它,因为如果您从不更新它,输入内容并不重要。
  • 谢谢@TomChristie,效果很好!不知道您可以像这样在可调用对象上使用点符号。如果您在下面发布,我会将其标记为正确答案。

标签: django django-rest-framework serialization


【解决方案1】:

您可以使用SerializerMethodField 来返回一个值,例如:

class FooSerializer(serializers.ModelSerializer):

    def getBarId(self, foo):
        return foo.get_bar().id

    barid = serializers.SerializerMethodField('getBarId')

【讨论】:

  • 谢谢,@Hamish,这行得通!这是“正确”的方式吗?我特别想知道我是否有一种方法可以单独定义一个BarSerializer,将一个 Bar 减少到它的主键,然后以某种方式在FooSerializer 中调用它
  • 我相信这是最好的方法。您可以创建一个BarSerializer,但这似乎是一个微不足道的案例,并且拥有一个简单地返回整数的序列化程序并没有真正的意义。
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2016-05-06
  • 2016-11-14
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多