将 GET 请求参数转换为 int ... 如果它是数字
Converting GET request parameter to int ... if it is numeric
假设我正在向用户显示一些数据,我希望用户能够使用 GET
表单对数据库中的数字字段执行某种过滤,所以我有这样的东西
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
语句中处理这个问题
您收到此错误的原因是因为 int() 期望数字值可以在表单字符串中,但它应该是像“22”、“33”等有效的数字。
但在您的情况下,您传递的是空值,这就是它引发错误的原因。您可以使用 type() 实现所需的输出,它可以帮助您检查数字的类型
所以修改后的代码是
code = request.GET.get('code')
condition = {}
if( code is not None and type(code) == int ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
希望对您有所帮助:)
isnumeric
可以检查 code
是否可以 cast 到 int
并检查 code
是否为正(当转换为整数)从而替换 int(code) > 0
:
if code is not None and code.isnumeric():
condition['code'] = int(code)
您应该使用带有一个或多个 IntegerField 的 Django 表单;他们为你做这个转换,然后你可以从 cleaned_data
.
得到结果
此函数将 GET 参数相应地转换为 python numeric/bool:
def convert_params_to_int_or_bool(params):
for k, v in params.items():
if v.isnumeric():
params[k] = int(v)
if v == 'false':
params[k] = False
if v == 'true':
params[k] = True
假设我正在向用户显示一些数据,我希望用户能够使用 GET
表单对数据库中的数字字段执行某种过滤,所以我有这样的东西
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
语句中处理这个问题
您收到此错误的原因是因为 int() 期望数字值可以在表单字符串中,但它应该是像“22”、“33”等有效的数字。
但在您的情况下,您传递的是空值,这就是它引发错误的原因。您可以使用 type() 实现所需的输出,它可以帮助您检查数字的类型
所以修改后的代码是
code = request.GET.get('code')
condition = {}
if( code is not None and type(code) == int ):
condition['code'] = int(code)
Somemodel.objects.filter(**condition)
希望对您有所帮助:)
isnumeric
可以检查 code
是否可以 cast 到 int
并检查 code
是否为正(当转换为整数)从而替换 int(code) > 0
:
if code is not None and code.isnumeric():
condition['code'] = int(code)
您应该使用带有一个或多个 IntegerField 的 Django 表单;他们为你做这个转换,然后你可以从 cleaned_data
.
此函数将 GET 参数相应地转换为 python numeric/bool:
def convert_params_to_int_or_bool(params):
for k, v in params.items():
if v.isnumeric():
params[k] = int(v)
if v == 'false':
params[k] = False
if v == 'true':
params[k] = True