簡體   English   中英

如何在 django rest_framework 中獲取日期范圍之間的數據?

[英]How to get data between date range in django rest_framework?

我想在兩個日期之間獲取一些數據,但得到一個錯誤,即“AttributeError: 'str' object has no attribute 'values'”。 我如何解決這個問題?

視圖.py

class TestView(APIView):
    def get(self, request):
        user_obj = Payload.objects.all()
        usr = self.request.user
        print(usr)
        user_data = TestSerializer(user_obj, many=True)
        return Response({'status':'success'})    

    def post(self, request):
        serializers = TestSerializer(data=request.data)
        if serializers.is_valid(raise_exception=True):
            start_date = serializers.validated_data['start_date']
            end_date = serializers.validated_data['end_date']
            user_id = serializers.validated_data['user_id']
            user_obj = Payload.objects.filter(user=user_id, timestamp__gte=start_date,timestamp__lte=end_date)
            sr = TestModelSerializer(user_obj, many=True)
            return Response({'status':sr.data}, status = status.HTTP_200_OK)
        else:
            print(serializers.errors,"errors")

序列化程序.py

class TestSerializer(serializers.Serializer):
    user_id = serializers.IntegerField()
    start_date = serializers.DateTimeField()
    end_date = serializers.DateTimeField()

class TestModelSerializer(serializers.ModelSerializer):
    model = Payload
    fields = '__all__'

模型.py

class Payload(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True, blank=False)
    input_values = models.CharField(max_length=20) 

    def __str__(self):
        return self.input_values

追溯在此處輸入圖像描述

我認為timestamp__gte應該是datetime時間object。 就像在這個例子中一樣。

我不確定serializer程序日期時間字段返回字符串或日期時間 object,但錯誤告訴那是string

from datetime import datetime, timedelta

date_filter = dict(created__gte=datetime.now() - timedelta(30), created__lte=datetime.now()) 

you can filter more customize 
start_date = '2021-05-21'
end_date = '2021-05-24'
date_filter = dict(created__gte=start_date), created__lte=end_date)

objs  = Klash.objects.filter(**date_filter) # Klash = your model name 

你可以試試這個。

Payload.objects.filter(user=user_id, timestamp__range=[start_date,end_date]

好吧,這根本不明顯,但我已經弄清楚了。 所以錯誤說'str' object has no attribute 'values' 根據回溯,有問題的行是for field in self.fields.values() ,其中selfTestModelSerializer的實例。

仔細看,序列化程序定義中有一個錯誤,它設置了fields = '__all__' ,而'__all__'是引發錯誤的字符串。 正確的定義應該是

class TestModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Payload
        fields = '__all__'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM