diff -r 293a595f4365 -r 95b3792a8947 web/facet.py --- a/web/facet.py Fri Nov 16 12:28:30 2012 +0100 +++ b/web/facet.py Thu Nov 22 16:13:43 2012 +0100 @@ -1388,11 +1388,16 @@ return if isinstance(value, list): value = reduce(lambda x, y: int(x) | int(y), value) + else: + value = int(value) attr_var = self.select.make_variable() self.select.add_relation(self.filtered_variable, self.rtype, attr_var) comp = nodes.Comparison('=', nodes.Constant(value, 'Int')) - comp.append(nodes.MathExpression('&', nodes.variable_ref(attr_var), - nodes.Constant(value, 'Int'))) + if value == 0: + comp.append(nodes.variable_ref(attr_var)) + else: + comp.append(nodes.MathExpression('&', nodes.variable_ref(attr_var), + nodes.Constant(value, 'Int'))) having = self.select.having if having: self.select.replace(having[0], nodes.And(having[0], comp)) @@ -1402,7 +1407,7 @@ def rset_vocabulary(self, rset): mask = reduce(lambda x, y: x | (y[0] or 0), rset, 0) return sorted([(self._cw._(label), val) for label, val in self.choices - if val & mask]) + if not val or val & mask]) def possible_values(self): return [unicode(val) for label, val in self.vocabulary()]