Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-字母数字ID的过滤器GTE LTE_Python_Django - Fatal编程技术网

Python Django-字母数字ID的过滤器GTE LTE

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

我正在尝试提供我们的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': ['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'
在查找中,需要拆分字符串,然后根据自己的参数进行搜索。这可能需要您执行以下操作之一:

  • 编写可以通过Django传递到查询中的自定义SQL
  • 请求包含您正在查找的子集的大量结果,并通过Python对其进行过滤,只返回重要的位 您试图实现的通常称为自然排序,在SQL方面往往很难做到。这里有一个很好的技巧,解释得很好:但是,在SQL世界中,亮点很简单:

    • 先按长度排序
    • 按第二列值排序

    您要做的是编写一个自定义查找。您可以在此处阅读更多关于它们的信息:

    下面的代码示例包含定义自己的函数所需的一切,实际函数除外。对于示例的这一部分,请检查链接

    from django.db.models import Lookup
    
    @Field.register_lookup
    class NotEqual(Lookup):
            lookup_name = 'ne'
    
    在查找中,需要拆分字符串,然后根据自己的参数进行搜索。这可能需要您执行以下操作之一:

  • 编写可以通过Django传递到查询中的自定义SQL
  • 请求包含您正在查找的子集的大量结果,并通过Python对其进行过滤,只返回重要的位 您试图实现的通常称为自然排序,在SQL方面往往很难做到。这里有一个很好的技巧,解释得很好:但是,在SQL世界中,亮点很简单:

    • 先按长度排序
    • 按第二列值排序

    什么是“筛选器将ID作为字符串并尝试按每个字符进行筛选”的意思?什么是“筛选器将ID作为字符串并尝试按每个字符进行筛选”的意思?您有任何示例如何实现这两个选项之一吗?我对Django的queryset部分相当陌生,我不知道,但是使用第一个链接编写一个应该不难。您只需在函数中进行一个DB查询,然后对结果进行排序。如果我们将ID作为字符串存储在DB中,它会起作用吗?而不是整数?因为我们在数据库中将其存储为“AB:12344”。想知道所有这些工作是否都能在字符串ID上工作,您必须在python代码中进行一些操作,以将其拆分并转换为数字。您是否有另一个数据库字段可以用于排序?没有。但这将是一个简单的解决方案,即添加一个数字字段,然后按该字段进行常规排序。您有任何示例如何实现这两个选项中的任何一个吗?我对Django的queryset部分相当陌生,我不知道,但是使用第一个链接编写一个应该不难。您只需在函数中进行一个DB查询,然后对结果进行排序。如果我们将ID作为字符串存储在DB中,它会起作用吗?而不是整数?因为我们在数据库中将其存储为“AB:12344”。想知道所有这些工作是否都能在字符串ID上工作,您必须在python代码中进行一些操作,以将其拆分并转换为数字。您是否有另一个数据库字段可以用来排序?没有。但这将是一个简单的解决方案,即添加一个数字字段,然后按该字段进行常规排序