Skip to main content
 首页 » 编程设计

python之基于输入类型的Django查询集

2025年05月04日42qq78292959

在 Django 1.9 上,我有一个表单允许用户根据他们的输入过滤模型:

def get_queryset(self): 
        cvs = Clean.objects.all() 
        query = self.request.GET.get('q') 
 
        if query: 
            cvs = cvs.filter(Q(cvscore__gte=query)).distinct() 
            cvs = cvs.order_by('cvscore')             
        return cvs 

我希望他们也能够搜索字符串并尝试过:

cvs = cvs.filter(Q(cvscore__gte=query) | Q(cv__icontains=query)).distinct() 

问题是如果输入是一个str,就会抛出一个错误:

invalid literal for int() with base 10:  

有解决办法吗?像这样的东西:

def get_queryset(self): 
        cvs = Clean.objects.all() 
        query = self.request.GET.get('q') 
 
        if query **is an integer**: 
            cvs = cvs.filter(Q(cvscore__gte=query)).distinct() 
            cvs = cvs.order_by('cvscore') 
        else: 
            cvs = cvs.filter(Q(cv__icontains=query)).distinct() 
 
        return cvs 

请您参考如下方法:

内部查询一切都是string。所以,你应该考虑使用 isdigit():
如果字符串中的所有字符都是数字并且至少有一个字符,则此方法返回 true,否则返回 false。 More Info

query = self.request.GET.get('q','') # Note this .get('q','') 
if query.isdigit(): # i.e '31231' as string, will be True 
   cvs = cvs.filter(Q(cvscore__gte=int(query))).distinct() 
   cvs = cvs.order_by('cvscore') 
else: 
   cvs = cvs.filter(Q(cv__icontains=query)).distinct()