Python DRF将ArrayField序列化为字符串
我有一个带有ArrayFieldPython DRF将ArrayField序列化为字符串,python,serialization,django-rest-framework,Python,Serialization,Django Rest Framework,我有一个带有ArrayField标记的模型,我需要它来回序列化为一个由逗号分隔的值字符串 型号.py from django.contrib.postgres.fields import ArrayField class Snippet(models.Model): tags = ArrayField(models.CharField(max_length=255), default=list) class SnippetSerializer(serializers.ModelSer
标记的模型,我需要它来回序列化为一个由逗号分隔的值字符串
型号.py
from django.contrib.postgres.fields import ArrayField
class Snippet(models.Model):
tags = ArrayField(models.CharField(max_length=255), default=list)
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('tags')
我希望将此字段作为一个标签字符串处理,如tag1、tag2、tag3
,我可以在modelsave()
方法中处理此字段,但DRF抱怨{tags:[“需要一个项目列表,但得到类型“str”。]}
序列化程序.py
from django.contrib.postgres.fields import ArrayField
class Snippet(models.Model):
tags = ArrayField(models.CharField(max_length=255), default=list)
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('tags')
在DRF中,我可以如何将此字段作为字符串管理?我在前端使用React,我可以在那里处理它,但我更喜欢在后端而不是客户端处理它。您需要创建一个自定义字段来处理所需的格式
postgres ArrayField的rest框架映射字段是一个ListField,因此您可以将其子类化
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):
tags = StringArrayField()
class Meta:
model = Snippet
fields = ('tags')
有关在此处写入rest Framework自定义字段的详细信息:
这可以正常工作,但drf web UI仍然显示消息-“列表当前不支持HTML输入。”。有没有办法让这个字段可以编辑,我们在这里输入逗号分隔的值。你应该能够发布json,在drf web UI中,除了HTML表单之外,它的左边还有一个“原始数据”,你可以发布json数据并输入逗号分隔的值。