我有一个django应用程序(1.8) 这是我模型的一部分:
price_1 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_1')
price_2 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_2')
price_3 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_3')
price_4 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_4')
price_5 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_5')
price_6 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_6')
price_7 = models.DecimalField(max_digits=6, decimal_places=0, null=True, help_text='price_7')
这是模型中的方法:
def min_prices(self):
prices = [self.price_1, self.price_2, self.price_3, self.price_4, self.price_5, self.price_6, self.price_7]
return min(['{0}'.format(i) for i in prices if i is not None])
我在模特中的价值观:
price 1: 4000
price 2: 2800
price 3: 1800
price 4: 900
我的代码应该返回900但是我得到1800而且我不明白为什么。
答案 0 :(得分:4)
min
函数正在比较字符串而不是数字,因此按字母顺序返回最小值。
尝试:
return str(min([price for price in prices if price]))
答案 1 :(得分:0)
您需要将字符串转换为整数:
>>> prices = [4000, 2800, 1800, 900]
>>> min(['{0}'.format(i) for i in prices if i is not None])
'1800'
>>> min([int('{0}'.format(i)) for i in prices if i is not None])
900
答案 2 :(得分:0)
这对我有用
>>> prices = [4000, 2000, 1800,900]
>>> '{}'.format(min(prices))
'900'