让我说我向用户展示了一些数据,我希望用户能够使用GET
表格对数据库中的数字字段执行某种过滤,所以我有这样的事情< / p>
code = request.GET.get('code')
condition = {}
if( code is not None and int(code) > 0 ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
但这只适用于我的代码包含数字,否则我会收到此错误
invalid literal for int() with base 10: ''
那么处理这个问题的pythonic方法是什么?我应该使用try/except
阻止吗?考虑到我可能会添加其他过滤器
if
语句中处理此问题
答案 0 :(得分:3)
isnumeric
可以检查code
是否可以已投放到int
并检查code
是否为正(转换为整数时)替换int(code) > 0
:
if code is not None and code.isnumeric():
condition['code'] = int(code)
答案 1 :(得分:2)
您应该使用带有一个或多个IntegerField的Django表单;他们为您执行此转换,然后您可以从cleaned_data
获得结果。
答案 2 :(得分:-1)
你得到这个错误的原因是因为int()期望数字中的值可以在表单字符串中但它应该是一个数字,如&#34; 22&#34;,&#34; 33&#34;等有效。
但是在你的情况下,你传递的是空的,这就是为什么它会引发错误。您可以使用type()实现所需的输出,它可以帮助您检查数字类型
所以修改后的代码是
code = request.GET.get('code')
condition = {}
if( code is not None and type(code) == int ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
希望有所帮助:)