Python 对字段的一部分执行Django查询
我有一个模型,它保存了一个版本号,出于历史原因,它被存储为一个文本字段,比如soPython 对字段的一部分执行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
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 )