Opened 16 years ago
Closed 16 years ago
#10514 closed (duplicate)
[PATCH]
Reported by: | Sebastian Noack | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.0 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
It would be nice, if the QuerySet would respect radd and ror, when combining it with other QuerySets. Note following example:
class PublicArticleQuerySet(QuerySet): def iterator(self): for obj in super(VisibleQuerySet, self).iterator(): obj._is_public = True yield obj def __or__(self, other): self._merge_sanity_check(other) # If a PublicArticleQuerySet is or'ed with an other QuerySet # we have to clone the other instead of this. So a QuerySet # is returned instead of a PublicArticleQuerySet, unless both # are PublicArticleQuerySets. combined = other._clone() combined.query.combine(self.query, sql.OR) return combined def __and__(self, other): self._merge_sanity_check(other) # If a PublicArticleQuerySet is and'ed with an other QuerySet # we have to clone this instead of the other. So allways a # PublicArticleQuerySet is returned. combined = self._clone() combined.query.combine(other.query, sql.AND) return combined # We want the behaviour described, also when combining vice versa. __ror__ = __or__ __rand__ = __rand__ class PublicArticleManager(models.Manager): def get_query_set(self): return PublicArticleQuerySet(self.model).filter(...) class Article(models.Model): ... objects = models.Manager() public_objects = PublicArticleManager() def is_public(self): if hasattr(self, '_is_public'): return self._is_public ...
I have attached a patch which enables this feature.
Note:
See TracTickets
for help on using tickets.
See #10515