【问题标题】:Catch-all field for unserialisable data of serializer序列化器不可序列化数据的全部捕获字段
【发布时间】:2023-01-28 19:45:22
【问题描述】:

我有一条可以发布元数据的路线。如果发布了已知字段,我想以结构化方式将它们存储在我的数据库中,只存储未知字段或验证失败的字段在 JSONField 中。

让我们假设我的模型是:

# models.py
from django.db import models


class MetaData(models.Model):
  shipping_address_zip_code = models.CharField(max_length=5, blank=True, null=True)
  ...
  unparseable_info = models.JSONField(blank=True, null=True)

我想使用内置的序列化逻辑来验证 zip_code 是否有效(5 个字母或更少)。如果是,我会正常进行并将其存储在shipping_address_zip_code 字段中。但是,如果验证失败,我想将其作为键值对存储在 unparseable_info 字段中,并仍然向调用该路由的客户端返回一条成功消息。

我有更多的领域,正在寻找一个通用的解决方案,但这里只包括一个领域可能有助于说明我的问题。

【问题讨论】:

  • 是的,你可以在序列化程序中做到这一点

标签: python django django-rest-framework django-serializer


【解决方案1】:
 def validate_shipping_address_zip_code(self, value):
      if value >= 5:
        return value
      else:
          raise serializers.ValidationError("Message Here")

序列化器中有更多的验证器查看更多细节 https://www.django-rest-framework.org/api-guide/serializers/

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多