详解从Django Rest Framework响应中删除空字段

 更新时间:2019年01月11日 08:26:33   作者:代码日志  
这篇文章主要介绍了详解从Django Rest Framework响应中删除空字段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

我使用django-rest-framework开发了一个API.

我正在使用ModelSerializer返回模型的数据.

models.py

class MetaTags(models.Model):
 title = models.CharField(_('Title'), max_length=255, blank=True, null=True)
 name = models.CharField(_('Name'), max_length=255, blank=True, null=True)

serializer.py

class MetaTagsSerializer(serializers.ModelSerializer):
 class Meta:
  model = MetaTags

响应

{
 "meta": {
  "title": null,
  "name": "XYZ"
 }
}

理想情况下,在API响应中,不应在响应中发送任何不存在的值.

当标题为null时,我希望响应为:

{
 "meta": {
  "name": "XYZ"
 }
}

您可以尝试覆盖to_native函数:

class MetaTagsSerializer(serializers.ModelSerializer):
 class Meta:
  model = MetaTags

 def to_native(self, obj):
  """
  Serialize objects -> primitives.
  """
  ret = self._dict_class()
  ret.fields = self._dict_class()

  for field_name, field in self.fields.items():
   if field.read_only and obj is None:
    continue
   field.initialize(parent=self, field_name=field_name)
   key = self.get_field_key(field_name)
   value = field.field_to_native(obj, field_name)

   # Continue if value is None so that it does not get serialized.
   if value is None:
    continue

   method = getattr(self, 'transform_%s' % field_name, None)
   if callable(method):
    value = method(obj, value)
   if not getattr(field, 'write_only', False):
    ret[key] = value
   ret.fields[key] = self.augment_field(field, field_name, key, value)

  return ret

我基本上从serializers.BaseSerializer复制了基本的to_native函数,并添加了一个值的检查.

更新:

至于DRF 3.0,to_native()被重命名为to_representation(),其实现稍有改变.这是DRF 3.0的代码,它忽略空值和空字符串值:

def to_representation(self, instance):
 """
 Object instance -> Dict of primitive datatypes.
 """
 ret = OrderedDict()
 fields = self._readable_fields

 for field in fields:
  try:
   attribute = field.get_attribute(instance)
  except SkipField:
   continue

  # KEY IS HERE:
  if attribute in [None, '']:
   continue

  # We skip `to_representation` for `None` values so that fields do
  # not have to explicitly deal with that case.
  #
  # For related fields with `use_pk_only_optimization` we need to
  # resolve the pk value.
  check_for_none = attribute.pk if isinstance(attribute, PKOnlyObject) else attribute
  if check_for_none is None:
   ret[field.field_name] = None
  else:
   ret[field.field_name] = field.to_representation(attribute)

 return ret

翻译自:https://stackoverflow.com/questions/27015931/remove-null-fields-from-django-rest-framework-response

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Biblibili视频投稿接口分析并以Python实现自动投稿功能

    Biblibili视频投稿接口分析并以Python实现自动投稿功能

    这篇文章主要介绍了Biblibili视频投稿接口分析并以Python实现自动投稿功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • PyQt5多线程刷新界面防假死示例

    PyQt5多线程刷新界面防假死示例

    今天小编就为大家分享一篇PyQt5多线程刷新界面防假死示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 如何使用Python OpenCV提取物体轮廓详解

    如何使用Python OpenCV提取物体轮廓详解

    图像的轮廓检测不论是机器视觉还是其他方面都有较大作用,下面这篇文章主要给大家介绍了关于如何使用Python OpenCV提取物体轮廓的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Python完整实现俄罗斯方块游戏全解

    Python完整实现俄罗斯方块游戏全解

    俄罗斯方块是一个最初由阿列克谢帕吉特诺夫在苏联设计和编程的益智类视频游戏。本文将利用python实现这一经典的小游戏,需要的可以参考一下
    2022-03-03
  • Python matplotlib绘图时指定图像大小及放大图像详解

    Python matplotlib绘图时指定图像大小及放大图像详解

    Matplotlib是一个面向对象的绘图库,我们绘制的图像中,每条曲线,每个边框等等都对应一个对象,下面这篇文章主要给大家介绍了关于Python matplotlib绘图时指定图像大小及放大图像的相关资料,需要的朋友可以参考下
    2022-05-05
  • Tensorflow卷积实现原理+手写python代码实现卷积教程

    Tensorflow卷积实现原理+手写python代码实现卷积教程

    这篇文章主要介绍了Tensorflow卷积实现原理+手写python代码实现卷积教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python 读取以空格分开的文件操作

    python 读取以空格分开的文件操作

    这篇文章主要介绍了python 读取以空格分开的文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python 列表排序方法reverse、sort、sorted详解

    Python 列表排序方法reverse、sort、sorted详解

    本文给大家介绍的是Python中列表排序方法中的reverse、sort、sorted操作方法,以及他们直接的区别介绍,有需要的小伙伴可以参考下。
    2016-01-01
  • OpenCV图像卷积之cv.filter2D()函数详解

    OpenCV图像卷积之cv.filter2D()函数详解

    在其官方文档中,filter2D()函数在掩模板介绍中一笔带过,我认为该函数应该进行详细介绍,下面这篇文章主要给大家介绍了关于OpenCV图像卷积之cv.filter2D()函数的相关资料,需要的朋友可以参考下
    2022-09-09
  • 使用 Python 合并多个格式一致的 Excel 文件(推荐)

    使用 Python 合并多个格式一致的 Excel 文件(推荐)

    这篇文章主要介绍了使用 Python 合并多个格式一致的 Excel 文件,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12

最新评论