Created
May 24, 2013 18:04
-
-
Save rouge8/5645375 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class LatestVersionManager(models.Manager): | |
""" | |
Return only the latest version of each model in its default query set. | |
Subclasses must define `version` and `id`. | |
""" | |
version = 'version' | |
id = '_id' | |
def get_query_set(self): | |
table = self.model._meta.db_table | |
where = """{table}.{version} = (SELECT MAX({version}) FROM {table} AS sub | |
WHERE {table}.{id} = sub.{id})""".format( | |
table=table, | |
version=self.version, | |
id=self.id) | |
return super(LatestVersionManager, self).get_query_set().extra(where=[where]) | |
class MyModelManger(PassThroughManager): | |
def my_method(self): | |
# do some stuff | |
pass | |
class MyModelQuerySet(QuerySet): | |
def my_method(self): | |
pass | |
class LatestMyModelManager(MyModelManager, LatestVersionManager): | |
pass | |
class MyModel(VersionedModel): | |
objects = LatestMyModelManager(queryset_cls=MyModelQuerySet) | |
all_versions = MyModelManager(queryset_cls=MyModelQuerySet) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment