我正在使用 DRF 构建 REST API。我正在使用 django_filters 来过滤结果集。在一个API中,我希望用户发送他的坐标(纬度,经度),并在后端创建一个范围(纬度+2到纬度-2)并返回结果,我不想从用户那里获取范围字段。所以我可以轻松地更改后端的范围。
我在过滤器类中创建了两个范围过滤器,工作正常,但网址如下所示:/posts/?latitude_min=22&latitude_max=28&longitude_min=80&longitude_max=84。在这里用户负责决定范围。我希望用户仅发送纬度和经度,我决定最大和最小范围。
class PostFilter(django_filters.FilterSet):
latitude = django_filters.RangeFilter(field_name='latitude')
longitude = django_filters.RangeFilter()
class Meta:
model = Post
fields = ['latitude', 'longitude', 'country', 'state', 'district', ]
最佳答案
我认为你可以使用“MethodFilter”,如下所示:
from django.db.models import Q
class PostFilter(django_filters.FilterSet):
latitude = django_filters.MethodFilter(action="filter_latitude")
longitude = django_filters.MethodFilter(action="filter_longitude")
class Meta:
model = Post
fields = ['latitude', 'longitude', 'country', 'state', 'district']
def filter_latitude(self, qs, value):
try:
return qs.filter(Q(latitude__gte=value-2)&Q(latitude__lte=value+2))
except BaseException:
return qs
def filter_longitude(self, qs, value):
try:
return qs.filter(Q(longitude__gte=value-2)&Q(longitude__lte=value+2))
except BaseException:
return qs
关于python - 如何在django中的过滤器类中设置后端过滤器范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844524/