Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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查询_Python_Sql_Django_Django Queryset - Fatal编程技术网

Python 对字段的一部分执行Django查询

Python 对字段的一部分执行Django查询,python,sql,django,django-queryset,Python,Sql,Django,Django Queryset,我有一个模型,它保存了一个版本号,出于历史原因,它被存储为一个文本字段,比如sox.y.z class Product(models.Model): version = TextField() 我想对数据库执行请求,比如,获取主版本号高于5的所有产品。或者获取所有次要版本低于6的产品 我对SQL能力不太熟悉。我能用Django querysets表达这样的东西吗?如果Django本机不支持纯SQL,也可以使用纯SQL 比如: Product.objects.filter(version

我有一个模型,它保存了一个版本号,出于历史原因,它被存储为一个文本字段,比如so
x.y.z

class Product(models.Model):
    version = TextField()
我想对数据库执行请求,比如,获取主版本号高于5的所有产品。或者获取所有次要版本低于6的产品

我对SQL能力不太熟悉。我能用Django querysets表达这样的东西吗?如果Django本机不支持纯SQL,也可以使用纯SQL

比如:

Product.objects.filter(version__some_expression_gt=5)
可能吗


我知道一个显而易见的解决方案是将
version
字段拆分为数字字段,但遗憾的是,出于愚蠢的原因,我没有这样的选择。

这只是一个“半”解决方案,但我想使用regex是一个好的开始。

您可以使用:

Product.objects.filter(version__regex=r'^[5-9]\.')
from django.db.models import Q

q_gt5 = Q( version__some_expression_gte="5" )
q_lt6 = Q( version__some_expression_lte="6" )

results_or    = Product.objects.filter(q_gt5 | q_lt6 )
results_and   = Product.objects.filter(q_gt5 & q_lt6 )
results_other = Product.objects.filter( ~q_gt5 & q_lt6 )