由于历史原因,我有一个保存版本号的模型,比如x.y.z。
class Product(models.Model):
version = TextField()我想在数据库上执行请求,例如,获取所有主版本号高于5的产品,或者获取所有版本低于6的产品。
我对SQL能力不太熟悉。我能用Django querysets来表达这样的事情吗?或者使用普通的SQL,如果Django本机不支持它呢?
类似于:
Product.objects.filter(version__some_expression_gt=5)这有可能吗?
我知道显而易见的解决方案是将version字段分割成它的数值对应项,但遗憾的是,出于愚蠢的原因,这不是我的选择。
发布于 2014-03-11 09:39:24
https://docs.djangoproject.com/en/dev/ref/models/querysets/#regex
Product.objects.filter(version__regex=r'^[5-9]\.')只是一个“一半”的解决方案,但我想玩regex是一个好的开始。
发布于 2014-03-11 09:45:45
您可以使用用于复杂查询的q
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 )https://stackoverflow.com/questions/22321606
复制相似问题