Маршрутизатор в Django REST Framework с фильтром набора запросов viewset - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу сделать фильтрацию данных в ответ API. Ie сделать такие адреса

/api/v1//CoinCost?coin_id=coin_name&dateStart=2020-02-06T00:00:00&dateEnd=2020-02-08T00:00:00

Мой код сейчас:

    from django_filters import rest_framework as filters

class CoinCostFilterSet(filters.FilterSet)
    class Meta:
        model = CoinCost
        fields = {
            'coin_id': ['exact'],
            'timestamp': ['gt', 'lt'],
        }

class CoinCostViewSet(viewsets.ViewSet):
    queryset = CoinCost.objects.all()
    serializer_class = CoinCostsSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = CoinCostFilterSet

И мой urls.py. Этот URL не работает

from django.urls import path, include
from . import views
from .views import CoinsView, CoinsCostsView, CoinCostViewSet
from django.views import generic

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register('CoinCost/$', CoinCostViewSet, basename='Coins')

app_name = 'Coins'

urlpatterns = [
    path('coins/', CoinsView.as_view()),
    path('coins_costs/update/', views.coins_costs_load),
    path('coins_load/update/', views.coins_load),
    path('', include(router.urls)),
    ]

я пытаюсь / api / v1 / CoinCost? Coin_id = bulbacoin и вижу ошибки

Using the URLconf defined in myminter.urls, Django tried these URL patterns, in this order:

admin/
api/v1/ coins/
api/v1/ coins_costs/update/
api/v1/ coins_load/update/
api/v1/ ^$ [name='api-root']
api/v1/ ^\.(?P<format>[a-z0-9]+)/?$ [name='api-root']
The current path, api/v1/CoinCost/, didn't match any of these.

Почему мой роутер не работает и как заставить работать маршрутизатор? Спасибо!

1 Ответ

0 голосов
/ 08 апреля 2020

Измените следующую строку:

router.register('CoinCost/$', CoinCostViewSet, basename='Coins')

Чтобы быть похожим на это:

router.register('CoinCost', CoinCostViewSet, basename='Coins')

Также обратите внимание, что у вас нет представлений в вашем CoinCostViewSet, поэтому либо добавьте действия, либо используйте класс как viewsets.ModelViewSet:

class CoinCostViewSet(viewsets.ModelViewSet):
    queryset = CoinCost.objects.all()
    serializer_class = CoinCostsSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = CoinCostFilterSet
...