将GET请求参数转换为int ...如果是数字

时间:2016-09-04 13:59:06

标签: python django python-3.x django-1.9

让我说我向用户展示了一些数据,我希望用户能够使用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语句中处理此问题

3 个答案:

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

希望有所帮助:)