Python Django-字母数字ID的过滤器GTE LTE
我正在尝试提供我们的API,以允许在ID查找中使用LTE和GTE进行过滤。但是,我们的ID是字母数字的,比如Python Django-字母数字ID的过滤器GTE LTE,python,django,Python,Django,我正在尝试提供我们的API,以允许在ID查找中使用LTE和GTE进行过滤。但是,我们的ID是字母数字的,比如AB:12345,AB:98765等等。我尝试使用Django过滤器在视图集上执行以下操作: class MyFilter(django_filters.FilterSet): item_id = AllLookupsFilter() class Meta: model = MyModel fields = { 'item_id': ['lt
AB:12345
,AB:98765
等等。我尝试使用Django过滤器在视图集上执行以下操作:
class MyFilter(django_filters.FilterSet):
item_id = AllLookupsFilter()
class Meta:
model = MyModel
fields = {
'item_id': ['lte', 'gte']
}
但问题是,,如果我查询为:
http://123.1.1.1:7000/my-实体/?项目\u id\u gte=AB:1999
甚至http://123.1.1.1:7000/my-entities/?item\u id\u lte=AB:100
它不会准确返回id大于1999或小于100的项目,因为筛选器将id作为字符串,并尝试按每个字符进行筛选。你知道如何实现吗?这样我就可以在ID上进行筛选,从而获得比数字ID大/小的项目(忽略初始字符)?你要做的是编写一个自定义查找。您可以在此处阅读更多关于它们的信息:
下面的代码示例包含定义自己的函数所需的一切,实际函数除外。对于示例的这一部分,请检查链接
from django.db.models import Lookup
@Field.register_lookup
class NotEqual(Lookup):
lookup_name = 'ne'
在查找中,需要拆分字符串,然后根据自己的参数进行搜索。这可能需要您执行以下操作之一:
- 先按长度排序
- 按第二列值排序
from django.db.models import Lookup
@Field.register_lookup
class NotEqual(Lookup):
lookup_name = 'ne'
在查找中,需要拆分字符串,然后根据自己的参数进行搜索。这可能需要您执行以下操作之一:
- 先按长度排序
- 按第二列值排序