Фильтр данных между двумя датами в Django rest api
Я создаю приложение react, которое использует Django rest API. Я хочу фильтровать данные между двумя диапазонами дат таким образом, чтобы пользователь мог выбрать начальную и конечную дату с фронтенда и отправить пост-запрос на мой Django бэкенд, а фильтрация должна быть выполнена с бэкенда. В настоящее время я застрял на том, что фильтрация не работает. Я фильтрую по timestamp(added_on).
Моя модель
class Orders(models.Model):
choices = ((1, "Nairobi"), (2, "Nyanza"),
(3, "Central"), (4, "Coast"),
(5, "Eastern"), (6, "North Eastern"),
(7, "Western"), (8, "Rift Valley"))
choices1 = ((1, "Pishori"), (2, "Komboka"))
id = models.AutoField(primary_key=True)
phone = models.CharField(max_length=255)
name = models.CharField(max_length=255)
customer_id = models.ForeignKey(Customer, on_delete=models.CASCADE)
town = models.CharField(max_length=255)
region = models.CharField(choices=choices, max_length=255)
farmer_id = models.ForeignKey(Farmer, on_delete=models.CASCADE)
kgs = models.CharField(max_length=255)
packaging = models.CharField(max_length=255)
transport = models.CharField(max_length=255)
discount = models.CharField(max_length=255)
amount = models.CharField(max_length=255)
price = models.CharField(max_length=255)
comment = models.TextField()
rice_type = models.CharField(choices=choices1, max_length=255)
status = models.BooleanField(default=False)
added_on = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
мой сериализатор
class OrdersSerializer(serializers.ModelSerializer):
class Meta:
model = Orders
fields = "__all__"
def to_representation(self, instance):
response = super().to_representation(instance)
response["farmer"] = FarmerSerializer(instance.farmer_id).data
response["customer"] = CustomerSerializer(instance.customer_id).data
return response
моя точка зрения
class OrderDateViewSet(generics.ListAPIView):
serializer_class = OrdersSerializer
queryset = Orders.objects.all()
permission_classes = [permissions.AllowAny]
def post(self, request):
try:
serializer = OrdersSerializer(data=request.data, context={"request": request})
serializer.is_valid(raise_exception=True)
startDate = serializer.validated_data['startDate']
endDate = serializer.validated_data['endDate']
orders = Orders.objects.filter(added_on__gte=startDate, added_on__lte=endDate)
serializer = OrdersSerializer(orders, many=True)
dict_response = {"error": False, "message": "Orders Between Dates", "data": serializer.data}
except:
dict_response = {"error": True, "message": "An error occured"}
return Response(dict_response)
После отправки запроса я получаю только сообщение об ошибке, но я хочу получить отфильтрованные данные
Я думаю, что нашел способ сделать это, но я все еще не знаю, почему он возвращает пустой массив вместо того, чтобы возвращать данные. Я сделал все изменения в моем view.py
class OrderDateViewSet(generics.ListAPIView):
serializer_class = OrdersSerializer
def get_queryset(self):
startDate = self.kwargs.get('startDate')
endDate = self.kwargs.get('enDate')
return Orders.objects.filter(added_on__range=[startDate, endDate])