django-pubtools is a helper library for creating publishable django models.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
pubtools
tests
.gitignore
LICENSE.txt
MANIFEST.in
README.md
runtests.py
setup.cfg
setup.py
tox.ini

README.md

django-pubtools is a helper library for creating publishable django models.

Circle CI codecov Latest Version

Overview

Extend the AbstractPublishableModel class to create a publishable model class.

  • Publishable content can be in either draft, preview, or published status.
  • Draft content may be previewed on the site by a logged-in staff member
  • Preview content may be previewed publicly, via a special url

Installation

pip install django-pubtools

Example implementation

models.py:

from django.db import models
import pubtools.models

class Article(pubtools.models.AbstractPublishableModel):
    title = models.CharField(max_length=100)

views.py:

from django.http import HttpResponse
from .models import Article

def article(request, id):
    # pass the request to enable staff preview
    articles = Article.objects.published(request)
    article = articles.get(id=id)
    return HttpResponse(article.title)

admin.py:

from django.contrib import admin
from baseclasses.admin import PublishableModelAdminMixin

from .models import Article

@admin.register(Article)
class ArticleAdmin(PublishableModelAdminMixin, admin.ModelAdmin):
    list_display = ('title', 'pub_status', )

Reference

pubtools.models.AbstractPublishableModel

Model fields
  • created (datetime, set on creation)
  • last_updated (datetime, updated on save)
  • pub_date (date)
  • pub_status (one of draft, review or published)
Model methods
  • published (property) return True if the instance is published
  • get_prev_published(qs=None, loop=False) get previous published instance
  • get_next_published(qs=None, loop=False) get next published instance

pubtools.models.PublishableModelQuerySet

Manager/queryset methods
  • published(self, request=None) If request is passed, and a preview status flag is in request.GET, then check if the user is a staff member, and return objects with the requested status if so. Otherwise, return only published objects.

pubtools.admin.PublishableModelAdminMixin

  • Overrides view_on_site to add a flag to urls for draft/preview content.
  • Adds a "Publish selected" action to the admin