def distinct(self, *criteria): """Restrict query result to distinct elements.""" n = len(criteria) if n == 0: _distinct = uniq else: if n == 1: criterion = first(criteria) elif criteria: criterion = TFL.Filter_And(*criteria) _distinct = _Q_Filter_Distinct_(criterion) return _Q_Result_(self, _distinct=_distinct)
def group_by(self, *criteria, **kw): """Group query result by `criteria`.""" if kw: criteria = list(criteria) Q = self.Q for k, v in pyk.iteritems(kw): criteria.append(getattr(Q, k) == v) criteria = tuple(criteria) assert criteria if len(criteria) == 1: criterion = first(criteria) else: criterion = TFL.Filter_And(*criteria) return self._Q_Result_Group_By_(self, criterion, self._distinct)
def filter(self, *criteria, **kw): """Restrict query result to elements matching the `criteria`.""" if kw: criteria = list(criteria) Q = self.Q for k, v in pyk.iteritems(kw): criteria.append(getattr(Q, k) == v) criteria = tuple(criteria) assert criteria if len(criteria) == 1: criterion = first(criteria) else: criterion = TFL.Filter_And(*criteria) return self._Q_Result_Filtered_(self, criterion, self._distinct)