Djangos orm fi中CharField的强制数值比较

2024-10-01 07:30:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django模型中有一个动态数据结构,基本上它是一个CharField,可以存储文本和数字:

class CSFeature(models.Model):
    csfFeatureValue = models.CharField(max_length=200)

我的筛选器:

cslist = CSFeature.objects.filter(csfFeatureValue__gte=filter_value)

这里的问题是,进行字符串比较,例如

存储值(csfFeatureValue)=23

  • filter\u value=13 filter返回模型
  • filter\u value=3 filter不返回模型(字符串比较)

我如何在这里强制进行数字比较?因为这是一个通用的数据模型,我不能改变模型的数据类型。。。你知道吗


Tags: django字符串模型文本数据结构modelvaluemodels
1条回答
网友
1楼 · 发布于 2024-10-01 07:30:58

这似乎是个糟糕的图案设计。我们假设鉴别器规则是'csfFeatureValue'是数字。你知道吗

您可以重写save方法以右对齐字段,而不是存储:

'13'

我们将存储:

'  _total of 198 blank spaces_ 13'  

在这里:

class CSFeature(models.Model):
    csfFeatureValue = models.CharField(max_length=200)

    def save(self, *args, **kwargs):
        if self.csfFeatureValue.isdigit():
            self.csfFeatureValue = "{0:200}".format(int( self.csfFeatureValue ))
        super(Model, self).save(*args, **kwargs)  

现在您可以比较:

filter_value = "{0:200}".format( 3 )
cslist = CSFeature.objects.filter(csfFeatureValue__gte=filter_value)  

我重复一遍:重新检查您的设计。这个答案只是解决相关问题的技术方法,但是您的问题不在于django查询api操作,而在于模型设计。你知道吗

相关问题 更多 >