Thanks Tim for the code optimization ideas. Very pythonic of you ;) On Sat, Jun 14, 2008 at 10:55 AM, Tim Chase <[EMAIL PROTECTED]> wrote:
> > >> cards = Card.objects.all() > >> if request.POST.get('brand') : > >> cards = cards.filter(brand = request.POST.get('brand')) > >> if request.POST.get('year') : > >> cards = cards.filter(year = request.POST.get('year')) > > > > Scott: Very cool, didn't know that was possible. I'm sure this > > does not hurt > > This can even be dumped in a loop, using dictionary kwargs which > makes it more DRY: > > cards = Card.objects.all() > for field in ('brand', 'year', 'color', 'size'): > if field in request.POST: > cards = cards.filter(**{ > field: request.POST.get(field) > }) > > This separates out the common code, and reduces the field-names > to just being entries in a list for which the same action is > performed for each. > > Given that they're ANDed together, you might even be able to just > build the dictionary, and then unpack that as your filter: > > fieldnames = ('brand', 'year', 'color', 'size') > kwargs = dict( > (field, request.POST.get(field)) > for field in fieldnames > if field in request.POST > ) > cards = Card.objects.filter(**kwargs) > > This *could* be reduced to a single (much more opaque) statement, > but I usually prefer to keep a little readability compared to > > cards = Card.objects.filter(**dict( > (field, request.POST.get(field)) > for field in ('brand', 'year', 'color', 'size') > if field in request.POST > )) > > I haven't delved into the new QS-RF code to see whether the > resulting queries differ vastly in meaning/efficiency, but I > remember there being a subtle difference between chained filters > vs. multiple filters applied at the same time (though that may > have only applied to related models). > > -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 -~----------~----~----~----~------~----~------~--~---