RajeshD, Tim, and Nis, We'll I think I got it working. I changed the following line:
Style.objects.filter(sandp__choice__in=choice_ids).distinct() to Style.objects.filter(sandp__in=choice_ids).distinct() That brought back the correct records. ///////////////////// Also, the problem with: y = y.filter(price__price_cat=request['price']) Actually, wasn't a problem. There wasn't a choice that contained 249 as the price //////////////////// Here is the final version of my view: def searchresult(request): if request.method == 'POST': NOT_PICKED = "---------------" y = Choice.objects.all() if ('price' in request.POST and request.POST['price'] <> NOT_PICKED): y = y.filter(price__price_cat__exact=request['price']) if ('size' in request.POST and request.POST['size'] <> NOT_PICKED): y = y.filter(size__size_cat__exact=request['size']) choice_ids = [c.id for c in y] styles = Style.objects.filter(sandp__in=choice_ids).distinct() if ('color' in request.POST) and (request.POST['color'] <> NOT_PICKED): styles = styles.filter(color_cat=request['color']) return render_to_response('searchresult.html', {'s': styles}) ///////////// Hopefully, it's at least readable now. Thanks again to everybody that helped! On Aug 10, 8:48 am, RajeshD <[EMAIL PROTECTED]> wrote: > Hi Greg, > > Please see some notes below. > > > def searchresult(request): > > if request.method == 'POST': > > NOT_PICKED = "---------------" > > y = Choice.objects.all() > > if ('price' in request.POST and request.POST['price'] <> > > NOT_PICKED): > > You could simplify idioms like the above into a single condition: > > if request.POST.get('price', None) <> NOT_PICKED: > > > > > y = y.filter(price__price_cat=request['price']) > > if ('size' in request.POST and request.POST['size'] <> > > NOT_PICKED): > > y = y.filter(size__size_cat=request['size']) > > choice_ids = [c.id for c in y] > > styles = > > Style.objects.filter(sandp__choice__in=choice_ids).distinct() > > if ('color' in request.POST) and (request.POST['color'] <> > > NOT_PICKED): > > styles = styles.filter(color_cat=request['color']) > > return render_to_response('searchresult.html', {'s': styles}) > > > //////////////// > > > I'm having a couple of problems with this code. First is the > > following code: > > > y = y.filter(price__price_cat=request['price']) > > Can you paste your entire model so we can see how you have defined > Choices, Price, Color, etc? ManyToManyFields get trickier when you > need to join multiple tables. I suspect that's what is causing this > problem for you. > > > I currently have two prices in the 200-299 range (249 and 299). If > > the user does a search for price between 200-299 then the only thing > > this filter returns is the first one. I never returns more than one. > > For example when i do a assert False, y after the statement above I > > get: > > > AssertionError at /rugs/searchresult/ > > [<Choice: (<Size: 5'3 x 7'6>, <Price: 299>)>] > > > I do have a record in my choice table that has 249 as the price. > > Instead of using assertions and debug print statements, it will save > you a lot of time if you dropped into a shell (python manage.py shell) > and ran a few of these querysets directly in there. View->Browse->Fix->Repeat > takes much longer in situations where you are just looking to > > create the right query sets. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---