【问题标题】:How to serialize an array to a string in Django Rest Framework?如何在 Django Rest Framework 中将数组序列化为字符串?
【发布时间】:2019-11-08 22:56:17
【问题描述】:

在一个用 Django 构建的网站中,我有一个模型,它有一个 CharField:

class Person(models.Model):
    name = models.CharField(max_length=255)
    age = models.IntegerField()
    categories = models.CharField(max_length=255)

CharField 可以包含以逗号分隔的字符串列表。例如:ADC,HJD,RTP

使用Django Rest Framework 我创建了一个 POST 端点,人们可以向该端点发布新记录。不过,该字段作为数组发布在 json 中。所以json看起来像这样:

{
    "name": "John",
    "age": 25,
    "categories": ["ADC", "HJD", "RTP"]
}

我想在Serializer create() 方法中简单地join() 数组。但它永远不会达到那个点,因为它被验证器过滤掉了。我猜验证是在视图中完成的,但我不确定从哪里开始挖掘。

有人知道如何让端点接受一个数组并将其转换为 CharField 中的逗号分隔字符串吗?

[编辑]

这些是我的视图集:

class DevicesViewSet(DatapuntViewSetWritable):
    queryset = Device.objects.all().select_related('owner', 'contact').prefetch_related('types').order_by('id')

    serializer_class = DeviceSerializer
    serializer_detail_class = DeviceSerializer

    http_method_names = ['post', 'list', 'get']


class ContactViewSet(CreateModelMixin, GenericViewSet):
    queryset = Device.objects.none()
    serializer_class = IotContactSerializer
    pagination_class = None

【问题讨论】:

  • 您想将数组中的内容连接成字符串并保存到数据库吗?
  • @MenilikBelay - 是的,确实如此。这就是我想做的。
  • 你能展示一下你的观点吗?这就是逻辑应该在的地方
  • @MenilikBelay - 我在问题中添加了我的观点

标签: python django serialization django-rest-framework


【解决方案1】:

根据已编辑的问题,您可以执行以下操作。在您的视图中继承 viewsets.ViewSet 并覆盖 create 方法并编写您的连接逻辑。 Check here

class CreatePersonViewSet (viewsets.ViewSet):
    def create(self, request):
         """
         Do your logic here... to create
         """
         pass

【讨论】:

  • 感谢您的建议。我想这会起作用,但这不是完全无视所有已完成的验证吗?
  • 您的基于类的视图可以检查您想要的所述验证。您对哪种验证感兴趣?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2015-06-11
  • 2013-05-23
  • 1970-01-01
  • 2021-04-19
  • 2013-11-17
相关资源
最近更新 更多