Запрос пользователей на основе времени

Я хочу добавить представление на основе класса для возврата пользователей, созданных от одной даты до другой даты. Я пробовал следующее, есть ли другие способы отфильтровать пользователей, созданных между двумя датами?

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])
        return Response({"User": userondate})

serializers.py

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

полный код на: https://github.com/abinashkarki/rest_framework_authentication/tree/master/authapp

использование фильтров Django

serilaizers.py

добавьте следующее

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

сделайте имя файла filters.py в том же пути, что и 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"),


]

в заключение не забудьте сделать

pip install django-filter и добавьте его в установленное приложение в settings.py

INSTALLED_APPS = [
    ...
    'django_filters',
]

Для получения дополнительной информации обратитесь к https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html

другой подход

вы можете сделать этот процесс вручную, переопределив метод get и получив параметры запроса вручную и вернуть ответ после сериализации набора запросов

Вернуться на верх