2017-09-13 46 views
0

我有以下SerializerField:通行證無以DRF SerializerField的to_representation

class TimestampField(Field): 
    def to_representation(self, value): 
     if not value: 
      return '' 

     return value.timestamp() 

而且我在串行這樣使用它:

class ArticlePhotobookSerializer(ModelSerializer): 
    delivery_date_from = TimestampField() 
    delivery_date_to = TimestampField() 

現在吸氣delivery_date_to可以返回None,這是我想使用to_representation方法轉換爲空字符串。然而,當我使用串行器來解析這個None值時,它甚至不會輸入to_representation方法並立即返回None。我應該更改爲to_representation方法None

回答

1

默認情況下,串行器的to_representation方法跳過字段值爲None的值(請參閱source)。

您可以編寫混合類覆蓋默認to_representation

class ToReprMixin(object): 
    def to_representation(self, instance): 
     ret = OrderedDict() 
     fields = [field for field in self.fields.values() if not field.write_only] 

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

      ret[field.field_name] = field.to_representation(attribute) 

     return ret 

,並在您的串行使用它:

class ArticlePhotobookSerializer(ToReprMixin, ModelSerializer): 
    ... 
+1

這是一個不錯的「功能」 ... ;-)感謝您指出了這對我來說!我希望能有一個設定,對於這麼小的事情,這是一個很大的改變。 – physicalattraction