现在,我正在通过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
答案 0 :(得分:4)
由于 id
参数为Number
,因此您应使用NumberFilter
和field_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
的迁移指南