国产探花免费观看_亚洲丰满少妇自慰呻吟_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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 虎林市| 天门市| 阳原县| 玉溪市| 芒康县| 新野县| 锦州市| 台江县| 宁明县| 桓仁| 瑞丽市| 五莲县| 钟山县| 威信县| 彰化县| 龙门县| 淮南市| 芦山县| 阳曲县| 遵义县| 启东市| 平凉市| 和林格尔县| 来凤县| 屏东县| 通化县| 无极县| 湖南省| 民县| 凉城县| 海城市| 盐津县| 阳谷县| 康保县| 龙川县| 昭苏县| 固安县| 富阳市| 五指山市| 天峻县| 延川县|