【问题标题】:Changing the field name when using Django rest framework使用 Django rest 框架时更改字段名称
【发布时间】:2016-05-28 07:48:38
【问题描述】:

我正在将来自 Django REST 框架的序列化数据提供给我网站上的 Javascript 数据透视表。如果我有一个名为“created_on”的变量,则 DRF 将其用作字段名称。我想在我的数据透视表中显示的是将转换为“创建于”的标签。

例如,我的 DRF 输出如下:

[{"created_on": "2016-04-23"}, {"created_on": "2016-05-23"}]

我想要的是:

[{"Created on": "2016-04-23"}, {"Created on": "2016-05-23"}]

如果我不重写序列化过程,这可能吗?

【问题讨论】:

  • 这个问题略有不同。如果我采用这种方法,字段名称仍将是较小的字母并包含下划线
  • 不,不会的。您可以根据需要定义您的 alternate_name。但是如果你愿意,你也可以在返回之前覆盖一个 Response 对象 perform_create
  • 如果所有情况都这样,你不能应用这个转换客户端吗?

标签: django django-rest-framework


【解决方案1】:

不,如果不覆盖序列化过程,这是不可能的(目前)。

为什么不可能?

这是因为您要用于created_on替代名称包含空格,并且无法在序列化程序中定义包含空格的字段。此外,目前还没有为序列化过程中使用的字段提供备用名称的功能。

可能的解决方案:

您可以覆盖序列化程序的to_representation() 方法,并在其中添加一个值等于created_on 键值的Created On 键。那么所有序列化的对象都会包含一个键Created On

class MySerializer(serializers.ModelSerializer):

    ...

    def to_representation(self, obj):
        primitive_repr = super(MySerializer, self).to_representation(obj)
        primitive_repr['Created On'] = primitive_repr['created_on']
        return primitive_repr  

如果备用名称不包含任何空格怎么办?

如果备用名称之间不包含任何空格,则您可以使用 SerializerMethodField()source 参数。

你可以这样做:

class MySerializer(serializers.ModelSerializer):

    alternate_name = serializers.SerializerMethodField(source='created_on')

    class Meta:
        model = MyModel
        fields = (.., 'alternate_name')

【讨论】:

  • 这给了我一个错误ModelSerializer' object has no attribute 'get_alternate_name'
  • @RajuSingh 您能否发布您的序列化程序和您收到的错误回溯,最好作为另一个问题。
  • 我修好了。错误来自其他原因。
  • @RajuSingh 我和ModelSerializer' object has no attribute 'get_ 有同样的问题,你能告诉我是什么问题吗?
  • @PaulFournel 抱歉,我不记得我的代码的实际问题是什么。但是如果您分享您正在尝试做的事情,那么我可能会提供帮助。
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2017-02-05
  • 2023-03-30
相关资源
最近更新 更多