【问题标题】:Django rest framework serialize ArrayField as stringDjango rest框架将ArrayField序列化为字符串
【发布时间】:2018-01-18 20:54:29
【问题描述】:

我的模型类中有一个带有“ArrayField”的字段,我希望它以逗号分隔的字符串来回序列化。

models.py

from django.contrib.postgres.fields import ArrayField

class Test(models.Model):
    colors = ArrayField(models.CharField(max_length=20), null=True, blank=True

我遵循了这个解决方案 - https://stackoverflow.com/questions/47170009/drf-serialize-arrayfield-as-string#=

from rest_framework.fields import ListField

class StringArrayField(ListField):
    """
    String representation of an array field.
    """
    def to_representation(self, obj):
        obj = super().to_representation(self, obj)
        # convert list to string
       return ",".join([str(element) for element in obj])

    def to_internal_value(self, data):
        data = data.split(",")  # convert string to list
        return super().to_internal_value(self, data)

在序列化器中:

class SnippetSerializer(serializers.ModelSerializer):
    colors = StringArrayField()

    class Meta:
        model = Test
        fields = ('colors') 

但出现以下错误 -

TypeError: to_representation() 接受 2 个位置参数,但给出了 3 个

请帮忙。

【问题讨论】:

  • PL.分享一下你用过的自定义Field类的代码。
  • @chatuur 我已经更新了。请检查:)

标签: python django serialization django-rest-framework


【解决方案1】:

该错误表明您正在向该方法传递一个附加参数。我注意到 super() 调用不正确。您可以将其替换为:

        obj = super().to_representation(obj)

【讨论】:

  • 这会给我一个错误:TypeError: super() takes at least 1 argument (0 given)
  • 你可能在 python2.x 上。使用 super(ClassName, self)
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 2018-03-08
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2020-10-02
  • 2021-08-04
  • 2015-06-29
相关资源
最近更新 更多