 <p>Since the price requires a decimal value we should supply it a decimal value. Try the following view:</p> <pre><code>def get_queryset(self, *args, **kwargs): qs = super(ProductListView, self).get_queryset(*args,**kwargs) query = self.request.GET.get("q", False) # provide default value or you get a KeyError if query: filter_arg = Q(title__icontains=query) | Q(description__icontains=query) try: filter_arg |= Q(price=float(query)) except ValueError: pass qs = self.model.objects.filter(filter_arg) return qs </code></pre> <p><code>qs = super(ProductListView, self).get_queryset(*args,**kwargs)</code> This is used to obtain the queryset provided by the parent classes of our view class <code>ProductListView</code>. Look in to python classes and inheritance here: <a href="http://www.jesshamrick.com/2011/05/18/an-introduction-to-classes-and-inheritance-in-python/" rel="nofollow">http://www.jesshamrick.com/2011/05/18/an-introduction-to-classes-and-inheritance-in-python/</a></p> <p><code>filter_arg |= Q(price=float(query))</code> this is used to append to our filter_arg value. It's the same as <code>filter_arg = filter_arg | Q(price=float(query)</code></p> <p><code>float(query)</code> with this we are trying to convert the query variable to a float and we put this in a <code>try</code> statement because it could give us a <code>ValueError</code> in which case the <code>query</code> value is not a <code>float</code>.</p>