Запрос пользователей на основе времени
Я хочу добавить представление на основе класса для возврата пользователей, созданных от одной даты до другой даты. Я пробовал следующее, есть ли другие способы отфильтровать пользователей, созданных между двумя датами?
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 и получив параметры запроса вручную и вернуть ответ после сериализации набора запросов