Метод вызова api и набор представлений
Я пытаюсь создать api вызов:
class CategoryViewSet(viewsets.ModelViewSet):
serializer_class = CategorySerializer
queryset = Category.objects.all()
@action(methods=['get'], detail=False)
def mainGgroups(self,request):
mainGroups = Category.objects.filter(category_id__isnull=True)
serializer = self.get_serializer_class()(mainGroups)
return Response(serializer.data)
serializer:
class CategorySerializer(serializers.ModelSerializer):
animals = AnimalSerializer(many=True)
class Meta:
model = Category
fields = ['id','category_id','name', 'description', 'animals']
Итак, основной url работает: http://127.0.0.1:8000/djangoadmin/groups/
Но если я пойду на: http://127.0.0.1:8000/djangoadmin/groups/maingGroups/
Я получаю эту ошибку:
{
"detail": "Not found."
}
urls.py:
router = routers.DefaultRouter()
router.register('groups', CategoryViewSet)
urlpatterns = [
path('', include(router.urls))
]
а urls.py из админки выглядит так:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("djangoadmin/", include('djangoadmin.urls')),
path("admin/", admin.site.urls),
]
Вопрос: как создать api метод в основном url?
Я думаю, что ваша проблема заключается в том, как вы инстанцируете свой класс сериализатора. Когда вы говорите:
@action(methods=['get'], detail=False)
def mainGroups(self,request):
mainGroups = Category.objects.filter(category_id__isnull=True)
serializer = self.get_serializer_class()(mainGroups)
return Response(serializer.data)
Параметр many
, если посмотреть на ваше сообщение об ошибке, похоже, по умолчанию принимает значение False
, тогда как вы хотите сериализовать многие из этих объектов.
Я бы изменил инстанцирование на:
@action(methods=['get'], detail=False)
def mainGroups(self,request):
mainGroups = Category.objects.filter(category_id__isnull=True)
serializer = self.get_serializer_class(mainGroups, many=True)
return Response(serializer.data)