过滤时如何更改url键参数

时间:2018-08-20 05:28:58

标签: django django-rest-framework django-filter

现在,我正在通过URL以/api/album/?id=123的形式查询数据库。如何在不影响结果的情况下将key('id')更改为album

也就是说,如何将/api/album/?id=123更改为/api/album/?album=123吗?

我正在为我的API使用 DjangoRestFramework django-filter 软件包

# model.py
from django.db import models


class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)


# serializer.py
from rest_framework import serializers


class AlbumSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = Album


# filter.py
from django_filters import rest_framework as filters


class AlbumFilter(filters.FilterSet):
    class Meta:
        model = Album
        fields = '__all__'


# views.py
from rest_framework.viewsets import ModelViewSet


class AlbumViewset(ModelViewSet):
    serializer_class = AlbumSerializer
    queryset = Album.objects.all()
    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = AlbumFilter

1 个答案:

答案 0 :(得分:4)

由于 id 参数为Number,因此您应使用NumberFilterfield_name,将字段明确提及为

class AlbumFilter(filters.FilterSet):
    album = filters.NumberFilter(field_name='id')

    class Meta:
        model = Album
        fields = '__all__'



field_name 的文档中,

  

过滤依据的模型字段的名称。如果未提供此参数,则默认使用FilterSet类上的过滤器属性名称



注意
如果您使用的是较低版本的 django-filter django-filter==1.1.0或更低版本),请使用 name 而不是 {{1} }

field_name


参考django-filter 2.0

的迁移指南