Models¶
TimeFramedModel¶
An abstract base class for any model that expresses a time-range. Adds
start
and end
nullable DateTimeFields, and provides a new
timeframed
manager on the subclass whose queryset pre-filters results
to only include those which have a start
which is not in the future,
and an end
which is not in the past. If either start
or end
is
null
, the manager will include it.
from model_utils.models import TimeFramedModel
from datetime import datetime, timedelta
class Post(TimeFramedModel):
pass
p = Post()
p.start = datetime.utcnow() - timedelta(days=1)
p.end = datetime.utcnow() + timedelta(days=7)
p.save()
# this query will return the above Post instance:
Post.timeframed.all()
p.start = None
p.end = None
p.save()
# this query will also return the above Post instance, because
# the `start` and/or `end` are NULL.
Post.timeframed.all()
p.start = datetime.utcnow() + timedelta(days=7)
p.save()
# this query will NOT return our Post instance, because
# the start date is in the future.
Post.timeframed.all()
TimeStampedModel¶
This abstract base class just provides self-updating created
and
modified
fields on any model that inherits from it.
StatusModel¶
Pulls together StatusField, MonitorField and QueryManager into an abstract base class for any model with a “status.”
Just provide a STATUS
class-attribute (a Choices object or a
list of two-tuples), and your model will have a status
field with
those choices, a status_changed
field containing the date-time the
status
was last changed, and a manager for each status that
returns objects with that status only:
from model_utils.models import StatusModel
from model_utils import Choices
class Article(StatusModel):
STATUS = Choices('draft', 'published')
# ...
a = Article()
a.status = Article.STATUS.published
# this save will update a.status_changed
a.save()
# this query will only return published articles:
Article.published.all()
SoftDeletableModel¶
This abstract base class just provides a field is_removed
which is
set to True instead of removing the instance. Entities returned in
manager available_objects
are limited to not-deleted instances.
Note that relying on the default objects
manager to filter out not-deleted
instances is deprecated. objects
will include deleted objects in a future
release. Until then, the recommended course of action is to use the manager
all_objects
when you want to include all instances.
UUIDModel¶
This abstract base class provides id
field on any model that inherits from it
which will be the primary key.
If you dont want to set id
as primary key or change the field name, you can override it
with our UUIDField
Also you can override the default uuid version. Versions 1,3,4 and 5 are now supported.
from model_utils.models import UUIDModel
class MyAppModel(UUIDModel):
pass