具有视图集查询集过滤器的 Django REST Framework 中的路由器
Router in Django REST Framework with viewset queryset filter
我想在 api 响应中进行数据过滤。即制作这样的地址
/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.
为什么我的路由器不工作以及如何制作一个工作的路由器?谢谢!
更改以下行:
router.register('CoinCost/$', CoinCostViewSet, basename='Coins')
像这样:
router.register('CoinCost', CoinCostViewSet, basename='Coins')
另外请注意,您的 CoinCostViewSet
中没有视图,因此请添加操作或使用 class,例如 viewsets.ModelViewSet
:
class CoinCostViewSet(viewsets.ModelViewSet):
queryset = CoinCost.objects.all()
serializer_class = CoinCostsSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = CoinCostFilterSet
我想在 api 响应中进行数据过滤。即制作这样的地址
/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.
为什么我的路由器不工作以及如何制作一个工作的路由器?谢谢!
更改以下行:
router.register('CoinCost/$', CoinCostViewSet, basename='Coins')
像这样:
router.register('CoinCost', CoinCostViewSet, basename='Coins')
另外请注意,您的 CoinCostViewSet
中没有视图,因此请添加操作或使用 class,例如 viewsets.ModelViewSet
:
class CoinCostViewSet(viewsets.ModelViewSet):
queryset = CoinCost.objects.all()
serializer_class = CoinCostsSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = CoinCostFilterSet