Skip to content

Instantly share code, notes, and snippets.

@rouge8
Created May 24, 2013 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rouge8/5645375 to your computer and use it in GitHub Desktop.
Save rouge8/5645375 to your computer and use it in GitHub Desktop.
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