Django2 / Python3:对dict()排序时,Django引发TypeError

时间:2019-07-14 01:37:50

标签: python django

我正在建立一个电子商务网站,我必须按价格过滤产品, 有很多关系,所以我会直言不讳。

  1. 我获取了Queryset,然后用它创建了dict
  2. 然后我使用dict按值对sorted()进行排序
  3. sorted()运行完美,我得到了所需的output
  4. 但是,如果2个产品具有相同的price,则会引发TypeError(也许是因为1> 1 == False,我认为):

    print(d)
    {<Product: Product 1>: Decimal('10.00'), <Product: Product 2>: Decimal('10.24'), <Product: Product 3>: Decimal('10.16'), <Product: Product 4>: Decimal('10.00')}
    
    sd = sorted((v, k) for (k, v) in d.items())
    TypeError: '<' not supported between instances of 'Product' and 'Product'
    
  5. 我用普通的python尝试了相同的情况,并且未引发任何错误,因此我认为这是与Django相关的错误。

那么,我该如何在我的Error项目的Except块中对此Django进行反击?

1 个答案:

答案 0 :(得分:0)

您可以像这样对对象id()进行排序:

sd = sorted((v, id(k), k) for (k, v) in d.items())

测试代码

class Class:
    pass

d = {Class(): 10, Class():10}
print(d)
sd = sorted((v, id(k), k) for (k, v) in d.items())
print(sd)

结果:

{<__main__.Class object at 0x0000000000428F98>: 10, <__main__.Class object at 0x00000000022947F0>: 10}
[(10, 4362136, <__main__.Class object at 0x0000000000428F98>), (10, 36259824, <__main__.Class object at 0x00000000022947F0>)]