我有一個簡單的對象過濾器,使用price__lt
和price__gt
。這適用於我的產品模型上名爲price的屬性,它是一個CharField
[字符串](十進制看到相同的錯誤,並導致聚集問題,因此恢復爲字符串)。Django對象過濾器 - 價格行爲奇怪,例如170被視爲17 etc
看來,在這些值傳遞給過濾器時,他們是在一種奇怪的方式處理,如10被視爲100例如:
/products/price/10-200/
收益產品售價100-200。過濾器將作爲filterargs傳入:FILTER ARGS: {'price__lt': '200', 'price__gt': '10'}
。這也意味着價格/ 0-170不會返回價格爲18.50的產品;它出於某種原因將170視爲「小於18」。
任何想法會導致這種情況,以及如何解決它?謝謝!
你能複製並粘貼相應的urlpattern(來自urls.py)嗎? – aruseni 2012-08-07 10:05:52
快速思考表明,當你交換到charfield時,任何比較都將基於我猜17(0)在18之前出現的字符?我會考慮在運行比較之前將值轉換爲十進制。 – 2012-08-07 10:11:17
我相信url模式是無關緊要的,因爲上面顯示的filterargs輸出{'price_lt':'200','price_gt':'10'}來自views.py中的一個打印內容,在它傳遞給Products之前。 objects.filter(filterargs) – user1568252 2012-08-07 10:17:18