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

- `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