[英]How to add data into 2 separate tables in 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()
,其中self
是TestModelSerializer
的實例。
仔細看,序列化程序定義中有一個錯誤,它設置了fields = '__all__'
,而'__all__'
是引發錯誤的字符串。 正確的定義應該是
class TestModelSerializer(serializers.ModelSerializer):
class Meta:
model = Payload
fields = '__all__'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.