Django中如何为GET请求参数设置默认值?
问题原因
Django的QueryDict的get()方法的默认值仅在参数完全不存在于查询字符串中时生效。如果URL中存在参数名但未赋值(例如请求路径为/find-users?zipcode=&service=1),此时zipcode对应的取值是空字符串'',不属于键不存在的场景,因此不会触发默认值逻辑。
解决方案
你可以手动判断参数取值是否为空,为空时手动替换为默认值即可,两种常用写法如下:
写法1:显式判断(兼容性最好,无逻辑坑)
def find_users(request): # 处理邮编参数 selected_zipcode = request.GET.get('zipcode') if not selected_zipcode: selected_zipcode = 75000 # 处理服务参数 selected_service = request.GET.get('service') if not selected_service: selected_service = 1 # 统一转换为和数据库字段匹配的整型 selected_zipcode = int(selected_zipcode) selected_service = int(selected_service) users = User.objects.filter( Q(zipcode=selected_zipcode), Q(proposals__pk=selected_service) ) return render( request, 'users.html', { # 原代码此处多写了冗余的users变量,且pet_sitters未定义,修正为查询得到的users即可 'users': users, })
写法2:短路求值(适合默认值非零/非空的场景)
selected_zipcode = int(request.GET.get('zipcode') or 75000) selected_service = int(request.GET.get('service') or 1)
注意:如果你的参数有效值包含0、空字符串这类布尔假值,不要使用短路求值写法,否则会误覆盖有效值
内容的提问来源于stack exchange,提问作者sbm54
相关产品推荐
相关产品推荐

