【问题标题】:django how to serialize fields into DateTimeRangeFielddjango 如何将字段序列化为 DateTimeRangeField
【发布时间】:2018-12-01 17:14:15
【问题描述】:

我在将字段序列化为 DateTimeRangeField 时遇到了一些问题。该请求当前必须具有以下格式:

data = {"time":
         {
           "lower": timeThing,
           "upper": laterTimeThing
         }
       }

我希望它在请求中看起来像这样:

data = {
           "start": timeThing,
           "end": laterTimeThing
       }

所以我可以将开始/结束序列化为下/上。 这是我的模型:

class Example(models.Model):
    time = DateTimeRangeField()
    user = models.ForeignKey('user.User')

class ExampleAPI(ListCreateAPIView):
    serializer_class = ExampleSerializer
    pagination_class = None
    queryset = Example.objects.all()

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

class ExampleSerializer(serializers.ModelSerializer):
    time = DateTimeRangeField(write_only=True)
    user = serializers.ReadOnlyField(source='user.id')

    class Meta:
        model = Example
        exclude = ['user']

我尝试创建一个custom field,但它似乎没有进入覆盖的 to_representation 或 to_internal_value。我得到的错误信息是 {'time': ['This field is required.']}

【问题讨论】:

    标签: python django serialization django-models django-rest-framework


    【解决方案1】:

    你可以试试这个

    import datetime
    
    from rest_framework import serializers
    from drf_extra_fields.fields import DateRangeField
    
    
    class RangeSerializer(serializers.Serializer):
        ranges = DateRangeField()
    
    
    serializer = RangeSerializer(data={'ranges': {'lower': datetime.date(2015, 1, 1), 'upper': datetime.date(2015, 2, 1)}})
    

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 2016-08-23
      • 2021-01-20
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      相关资源
      最近更新 更多