国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解從Django Rest Framework響應中刪除空字段

2020-02-16 00:35:27
字體:
來源:轉載
供稿:網友

我使用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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 融水| 潞西市| 通河县| 靖州| 明星| 婺源县| 万全县| 彰武县| 普定县| 丘北县| 松滋市| 宾阳县| 义乌市| 元氏县| 宜兰县| 高陵县| 兴城市| 疏附县| 封丘县| 克什克腾旗| 岢岚县| 尼玛县| 东兴市| 鞍山市| 邮箱| 靖州| 长顺县| 连山| 自贡市| 华坪县| 大埔区| 涪陵区| 焉耆| 呼玛县| 东源县| 平潭县| 内丘县| 大田县| 顺平县| 翁源县| 江孜县|