代码之家  ›  专栏  ›  技术社区  ›  user1584120

django如何将字段序列化为DateTimeRangeField

  •  1
  • user1584120  · 技术社区  · 6 年前

    我在将字段序列化为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-u表示或to-u内部值中。我收到的错误消息是{'time':['此字段是必需的。']}

    1 回复  |  直到 6 年前
        1
  •  0
  •   ahprosim    6 年前

    你可以试试这个

    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)}})