django-baseclasses is a small set of helpers and abstract base model classes for django.
python ./setup.py install
Or with pip:
pip install django-baseclasses
Stores a record of when the model was created and last changed, in the creation_date
and last_updated
fields, orders on creation_date
, and
provides get_next
and get_prev
methods respecting the ordering.
Extends DateAuditModel
, adding is_live
and pub_date
fields, and provides
a live
method on the default manager which returns only objects with
is_live
set and a non-future pub_date
. Also orders by pub_date
, and
provides next_live
and prev_live
methods which only cycle through "live"
objects.
Provides caption
, image
and sort_order
fields. Orders on sort_order
.
Parent model for use with a BaseImageModel
with a ForeignKey to this model.
Provides primary_image
property which returns the first related image object,
or None
. The ForeignKey's related_name
must be "image_set"
Provides parent
field to create a simple hierarchy system, i.e. categories
and subcategories. Provides get_hierarchy method, which returns a list of
objects in the tree, from the top level to the current.
Resizes the image on upload and overwrites the original. Use max_dimensions
argument to determine the resize behaviour.
Arguments: (instance, prev=False, qs=None, loop=False)
Get the next (or previous with prev=True) item for an instance, from the given queryset (which is assumed to contain instance), respecting queryset ordering. If loop is True, return the first/last item when the end/start is reached.
Enables (cache-safe) admin preview of non-live objects. Example
@admin.register(MyModel)
class MyModelAdmin(ContentModelAdminMixin, admin.ModelAdmin):
...
Pass the request to the model's live
manager method to enable preview:
def my_model_view(request, slug)
instance = get_object_or_404(MyModel.objects.live(request), slug=slug)
...
# models.py
from django.db import models
from baseclasses.models import BaseContentModel, BaseModelWithImages, \
BaseImageModel
class Article(BaseContentModel, BaseModelWithImages):
title = models.CharField(max_length=190)
text = models.TextField()
class ArticleImage(BaseImageModel):
article = models.ForeignKey(Article, related_name='image_set')
With the above model definition, you can do the following:
articles = Article.objects.live() # get queryset of all live articles
article = articles[0]
article.primary_image # get primary image (model instance) for the article
article.next_live # get next live article