带有viewset-router查询集过滤器的Django REST框架

问题描述 投票:0回答:2

我想在api响应中进行数据过滤。即做出这样的地址

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

现在我有这个网址

/api/v1/CoinCost/

并且不进行过滤。

我的代码:

views.py

class CoinCostViewSet(viewsets.ViewSet):

    def list(self, request):
        queryset = Coins.objects.all()
        serializer = CoinSerializer(queryset, many=True)
        return Response(serializer.data)

urls.py

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

urlpatterns = [
    path('', include(router.urls)),
    ]

serializers.py

class CoinCostsSerializer(serializers.ModelSerializer):
class Meta:
    fields = ('coin_id', 'crr', 'volume', 'reserve', 'price', 'timestamp')
    model = CoinCost

models.py

class CoinCost(models.Model):
coin_id = models.ForeignKey(Coins, on_delete=models.CASCADE)
crr = models.CharField(max_length=3)
volume = models.DecimalField(max_digits=19, decimal_places=4)
reserve = models.DecimalField(max_digits=19, decimal_places=4)
price = models.DecimalField(max_digits=19, decimal_places=4)
timestamp = models.DateTimeField(auto_now_add=True, blank=True)

请帮助进行必要的过滤。获取过滤网址。我坐了两天,我听不懂。我研究了很多文档,并尝试了一周的不同方法。但是没有帮助。谢谢!

python django rest view django-queryset
2个回答
0
投票
我建议使用django_filters。您需要完成安装和设置部分。但是您的代码应如下所示。筛选字段可能与您想要的不同。如果这是硬性要求,则可以查看文档以了解如何更改参数名称。

我还已将django_filters的模型和序列化器固定为与CoinCostViewSet而不是CoinCost相关。

Coins


0
投票
据我所知,您希望通过网址传递参数,并且需要过滤器

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

© www.soinside.com 2019 - 2024. All rights reserved.