代码应返回最小值,但不会

时间:2016-11-29 15:05:46

标签: python django model min

我有一个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而且我不明白为什么。

3 个答案:

答案 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'