Updated version of #31

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# It's easier to store a dict of the possible lookups we want, where
# the values are the keyword arguments for the actual query.
qdict = { 'available_for': 'property__houselet_available_for',
          'available_to_move_in': 'property_available_from',
          'district': 'property__district',
          'furnished': 'property__houselet__furniture_option',
          'max_price': 'property__houselet__rent_price__lte',
          'min_price': 'property__houselet__rent_price__gte',
          'property_type': 'property__property_type'
        }

# Then we can do this all in one step instead of needing to call
# 'filter' and deal with intermediate data structures.
q_objs = [Q(**{qdict[k]: form.clean_data[k]}) for k in qdict.keys() if form.clean_data.get(k, None)]

search_results = Ad.objects.select_related().filter(*q_objs)

More like this

  1. Slightly better media path tag by ubernostrum 6 years, 1 month ago
  2. Ordered items in the database by Leonidas 6 years ago
  3. Convert Q object to function by spenczar 9 months, 4 weeks ago
  4. Complex Formsets by smagala 4 years, 4 months ago
  5. @url decorator improvements by davepeck 3 years, 9 months ago

Comments

lbolognini (on March 3, 2007):

Hi James,

thanks for doing this, only thing is that in q_objs Q can't be an expression. I'll be posting a rather more verbose version of my first snippet soon... sylistic improvements/corrections/suggestions still very welcome!

Ciao, Lorenzo

#

ubernostrum (on March 12, 2007):

Just updated it with the way I should have written it in the first place, using dictionary unpacking to handle the keyword arguments to Q. It introduces quite a few more dictionary instantiations, but still keeps the maintainability of the original.

#

lbolognini (on March 13, 2007):

Very nice James, thanks!

#

(Forgotten your password?)