简体   繁体   English

带有视图集查询集过滤器的 Django REST 框架中的路由器

[英]Router in Django REST Framework with viewset queryset filter

I want to do data filtering in a api response.我想在 api 响应中进行数据过滤。 Ie make such addresses即制作这样的地址

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

My code now:我现在的代码:

    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

And my urls.py.还有我的 urls.py。 This url no work这 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)),
    ]

i try /api/v1/CoinCost?coin_id=bulbacoin and i see errors我尝试 /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.

Why does my router not work and how to make a working router?为什么我的路由器不工作以及如何制作一个工作路由器? Thanks!谢谢!

Change the following line:更改以下行:

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

To be like so:变成这样:

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

Also, note that you have no views in your CoinCostViewSet , so either add actions or use a class like viewsets.ModelViewSet :另外,请注意,您的CoinCostViewSet中没有视图,因此请添加操作或使用 class 之类的viewsets.ModelViewSet

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM