Ok...I'm looking more into sets.  Whenever I do a search for products
under 3' width.  This is what I get when I do a 'assert False, myset':

AssertionError at /rugs/searchresult/
set([<Style: Ionica>, <Style: 112G>, <Style: 450g>, <Style: 439r>,
<Style: 450g>, <Style: 252J>, <Style: 1732M>, <Style: 112G>])

I don't understand how the 2 entries of '<Style: 112G>' and '<Style:
450g>' are getting put into the list.

//////////

I ran some examples through in my python prompt:

>>> s = set([1,2,3,4,5,6])
>>> s.add(7)
>>> s
set([1, 2, 3, 4, 5, 6, 7])
>>> s.add(7)
>>> s
set([1, 2, 3, 4, 5, 6, 7])
>>> s2 = set([1,2,3,4,5])
>>> s2.add(9)
>>> s2
set([1, 2, 3, 4, 5, 9])
>>> s2.add(5)
>>> s2
set([1, 2, 3, 4, 5, 9])

I created the same thing using the s2 variable and the s2.add(5)
statement wasn't added to the list.  It makes me wonder if the two
'<Style: 112G>' and '<Style: 450g> objects are different, because
based on my example only one of each should be in the list.

Thanks

On Aug 9, 12:17 pm, Greg <[EMAIL PROTECTED]> wrote:
> Tim and Nis,
> Okay thanks for the help.  My view is definitily better now than
> before.  Here is my new view
>
> def searchresult(request):
>         if request.method == 'POST':
>                 myset = set()
>                 NOT_PICKED = "---------------"
>                 y = Choice.objects.all()
>                 if ('price' in request.POST and request.POST['price'] <>
> 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'])
>                 for q in y:
>                         styles = Choice.objects.get(id=q.id).style_set.all()
>                         if ('color' in request.POST) and 
> (request.POST['color'] <>
> NOT_PICKED):
>                                 styles = 
> styles.filter(color_cat=request['color'])
>                         for style in styles:
>                                 myset.add(style)
>         if myset == set([]):
>                 return render_to_response('searchresult_none.html', {'s': "No
> product available"})
>         else:
>                 return render_to_response('searchresult.html', {'s': myset})
>
> ////////////////////
>
> Does that look any better?  I have two issues with this.
>
> 1) Is there anyway to get it so that I don't have to use the following
> for loop:
>
> for style in styles:
>         myset.add(style)
>
> 2) Is still adds duplicate products.  If a product contains two
> choices that have a price of 149 and 199.  Then when a user searches
> by price only (100-199) then the product is displayed twice in the
> result set.
>
> ////////
>
> Thank you SO much for your help!!!  This is my first time developing
> in Python and I'm learning quite a bit.
>
> On Aug 9, 8:37 am, Tim Chase <[EMAIL PROTECTED]> wrote:
>
> > > NO_COLOR = "---------------"
> > > styles = Choice.objects.get(id=h.id).style_set.all()
> > > if ('color' in request.POST) and (request.POST['color'] <> NO_COLOR):
> > >     styles = styles.filter(color_cat=request['color'])
> > > for u in styles:
> > >     dict[u] = u
>
> > > ////
>
> > > I did notice that whenever I do a search for just the color 'brown'.
> > > Then the result set will bring back the same style however many
> > > different sizes that are in the style.  So if an area rug sells two
> > > choices (2'x3' 39.00, 4'x6' 149.00).  Then that style will show up
> > > twice in the result set.  Is there anyway better to filter out the
> > > styles that have already been added to the dictionary.  My previous
> > > code worked..but not sure it's the best way to do it.  Here it is:
>
> > > num = 0
> > > for a in dict:
> > >    if a == j: # 'j' being the name of the style and 'a' is the name of
> > > the style that is already in the dictionary
> > >            num = 1
> > >    if num == 0:
> > >            dict[j] = j
>
> > I second the suggestion by Nis to make meaningful variable names,
> > as well as the suggestion to use sets rather than abusing a
> > dictionary (and tromping on the namespace with "dict"...just got
> > bitten by this yesterday, a "zip"-code variable shadowed the
> > built-in zip() command causing some confusing errors)
>
> > It looks like you could just do something like
>
> >    results = Choice.objects.get(id=h.id).style_set.all()
> >    # filter results
> >    results = set(results)
>
> > I'm not sure on the performance of set creation, so you might
> > compare the results with
>
> >   results = set(list(results))
>
> > or
>
> >   results = set(tuple(results))
>
> > -tim


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to