From: Eevee Date: Mon, 5 Oct 2009 02:17:34 +0000 (-0700) Subject: Fix search to do an AND of tags, not OR. X-Git-Url: http://git.veekun.com/zzz-floof.git/commitdiff_plain/7222589e3a941faf670445af1f93a930f5a6fde0?hp=78e8e474570281219830844ca29076fad52b5020 Fix search to do an AND of tags, not OR. --- diff --git a/floof/controllers/search.py b/floof/controllers/search.py index 75926e7..75bbba8 100644 --- a/floof/controllers/search.py +++ b/floof/controllers/search.py @@ -24,12 +24,11 @@ class SearchController(BaseController): tags = query.split() tagtexts = TagText.query.filter(TagText.text.in_(tags)) - tagtext_ids = map(lambda x:x.id, tagtexts) - - # TODO: this is wrong. Please fix it so it returns art that has all the tags. - art_tag_pairs = elixir.session.query(Art,Tag).filter(Art.id == Tag.art_id).\ - filter(Tag.tagtext_id.in_(tagtext_ids)).all() - - # just the art please. - c.artwork = map(lambda x: x[0], art_tag_pairs) - return render('/index.mako') \ No newline at end of file + tagtext_ids = [_.id for _ in tagtexts] + + # Fetch art that has all the tags + c.artwork = Art.query.join(Tag) \ + .filter(Tag.id.in_(tagtext_ids)) \ + .all() + + return render('/index.mako')