-1

I want to add a class-based view to return users created from one date to another date. I have tried the following are there other ways to filter the user-created between two dates? While doing this I get:

TypeError: get() missing 1 required positional argument: 'to_date'

views.py

class RegisteredUserFilter(APIView):
    serializer = RegisteredUserFilterSerializer

    def get(self, from_date, to_date):
        userondate = User.objects.filter(created_at__range=[from_date, to_date]).values()
        return Response({"User": userondate})

serializers.py

class RegisteredUserFilterSerializer(serializers.Serializer):
    from_date = serializers.DateField()
    to_date = serializers.DateField()
    model = User

full code at: https://github.com/abinashkarki/rest_framework_authentication/tree/master/authapp

  • Does this answer your question? [How do I filter query objects by date range in Django?](https://stackoverflow.com/questions/4668619/how-do-i-filter-query-objects-by-date-range-in-django) – cch Nov 08 '21 at 11:10
  • https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html this the solution – Mohamed Beltagy Nov 08 '21 at 11:17

1 Answers1

1

using Django filters

serilaizers.py

add the following

class RegisteredUserFilterSerializer(serializers.Serializer):
    
    class Meta:
        model = User
        fields = ['username', 'created_at']

make file name it filters.py in same path of views.py

filters.py

from django_filters.rest_framework import FilterSet
import django_filters
from .models import User
from django_filters.widgets import RangeWidget


class UserFilter(FilterSet):
    date_range = django_filters.DateFromToRangeFilter(label='Date Range', field_name='created_at',
                                                      widget=RangeWidget(attrs={'type': 'date'}))

    class Meta:
        model = User
        fields = ['created_at']

Views.py

from .serializers import RegisteredUserFilterSerializer
from .filters import UserFilter
from  django_filters.rest_framework import DjangoFilterBackend
from rest_framework.generics import ListAPIView

class RegisteredUserFilter(ListAPIView):
    serializer_class = RegisteredUserFilterSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_class = UserFilter
    model = User

  

urls.py add

from django.urls import path
from .views import RegisteredUserFilter
urlpatterns = [
    path('users-filter/', RegisteredUserFilter.as_view(), name="user-filter"),


]

finally do not forget to make

pip install django-filter and add it to installed app in settings.py

INSTALLED_APPS = [
    ...
    'django_filters',
]

for more information refer to https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html

another approach

you can make this process manually by overriding the get method and getting query parameters manually and return response after serializing the query set

Mohamed Beltagy
  • 593
  • 4
  • 8