Объект не является итерируемым в Django при возврате объектов в API
Я использую Django rest framework и Django для создания сайта, показывающего события.
Я фильтрую существующие модели в базе данных и вывожу новые объекты в новом API. Пока что я возвращаю все объекты в базе данных, а при возврате отфильтрованных объектов возникает такая ошибка: TypeError: 'type' object is not iterable.
В models.pyЗдесь вы видите, что на самом деле я не фильтрую по дате. Вместо этого я тестирую код, фильтруя по статусу.
from django.db import models
class EventQuerySet(models.QuerySet):
def today(self):
return self.filter(status="Publish")
class EventManager(models.Manager):
def get_queryset(self):
return EventQuerySet(self.model, using=self._db)
def today(self):
return self.get_queryset().today()
class Event(models.Model):
CATEGORY = (
('Smiles', 'Smiles'),
('Laughter', 'Laughter'),
('Crazy', 'Crazy'),
('Food', 'Food'),
('Outside', 'Outside'),
)
STATUS = (
('Publish', 'Publish'),
('Draft', 'Draft'),
)
title = models.CharField(max_length=200, blank=False)
status = models.CharField(max_length=200, null=True, choices=STATUS)
startDate = models.DateField(blank=True)
endDate = models.DateField(blank=True)
link = models.CharField(max_length=200, blank=False)
category = models.CharField(max_length=200, null=True, blank=True, choices=CATEGORY)
objects = models.Manager()
date = EventManager()
class Meta:
unique_together = ('title', 'link')
def __str__(self):
return self.title
Используя оболочку python manage.py для проверки, запрос работает и выводит правильные объекты. Вот пример некоторых данных, которые я получаю:
<EventQuerySet [<Event: Positivus Festival 2022>, Central European zone stage in equestrian show jumping "Rīga 2022" >, <Event: Exhibition Dramaturgy of the Landscape>, <Event: Writing Implements of Medieval Riga>, '...(remaining elements truncated)...']>
Вот мой файл views.py Я следовал этой официальной документации.
from events.models import Event
from rest_framework import generics
from rest_framework.generics import ListAPIView
from events.serializers import EventSerializer
from django_filters import rest_framework as filters
class EventTodayView(ListAPIView):
"""
API endpoint that allows events to be viewed or edited.
"""
queryset = Event.date.today()
class EventFilter(filters.FilterSet):
title = filters.CharFilter(field_name="title", lookup_expr='contains')
startDate = filters.DateFilter(field_name="startDate", lookup_expr='gte')
endDate = filters.DateFilter(field_name="endDate", lookup_expr='lte')
class Meta:
model = Event
fields = ['title', 'status', 'startDate', 'endDate']
class EventAPIView(generics.ListAPIView):
"""
API endpoint that allows events to be viewed or edited.
"""
queryset = Event.objects.all().order_by('startDate')
serializer_class = EventSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = EventFilter
А это мой файл urls.py
from django.contrib import admin
from django.urls import path
from events import views
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', views.EventAPIView.as_view(), name='api'),
path('api/today', views.EventTodayView.as_view(), name='api-today')
]
Полное сообщение об ошибке здесь:
Internal Server Error: /api/today
Traceback (most recent call last):
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\django\views\generic\base.py", line 84, in view
return self.dispatch(request, *args, **kwargs)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\generics.py", line 199, in get
return self.list(request, *args, **kwargs)
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\mixins.py", line 38, in list
queryset = self.filter_queryset(self.get_queryset())
File "D:\Prosjekter\Koding\What's happening\env\lib\site-packages\rest_framework\generics.py", line 149, in filter_queryset
for backend in list(self.filter_backends):
TypeError: 'type' object is not iterable
Любая помощь будет высоко оценена. Спасибо :)