A set of Django mixins to easily record authorship information for your models.
- Base model allows easy recording of authorship information.
- Integration with Django's class-based views and forms.
- Integration with Django's admin.
The full documentation is at https://thecut-authorship.readthedocs.org.
Install thecut-authorship using the installation instructions found in the project documentation.
Build a model based on thecut.authorship.models.Authorship to record authorship information on it:
from thecut.authorship.models import Authorship
class MyModel(Authorship):
pass
This adds created_by, created_at, updated_by, and updated_at to your model.
Pass a user into calls to .save() to record which user changed the object:
example = MyModel() example.save(user=request.user)
If you need to update model data and there's no direct link to a website user, generate and use a site-wide 'generic' user.:
from thecut.authorship.models import get_website_user example = MyModel() example.save(user=get_website_user())
If you wish to automatically record authorship information for changes made in the Django admin, use thecut.authorship.admin.AuthorshipMixin.:
from .models import MyModel
from django.contrib import admin
from thecut.authorship.admin import AuthorshipMixin
@admin.register(MyModel)
class MyModelAdmin(AuthorshipMixin, admin.ModelAdmin):
pass
If you wish to integrate with django.forms.ModelForm, use thecut.authorship.forms.AuthorshipMixin and thecut.authorship.views.AuthorshipMixin.
In your forms.py:
from .models import MyModel
from django import forms
from thecut.authorship.forms import AuthorshipMixin
class MyModelForm(forms.ModelForm):
class Meta(object):
model = MyModel
In your views.py:
from .forms import MyModelForm
from .models import MyModel
from django.views.generic import CreateView
from thecut.authorship.views import AuthorshipMixin
class MyModelCreateView(AuthorshipMixin, CreateView):
form_class = MyModelForm
MyModelCreateView will now automatically pass request.user through to MyModelForm, which will pass it through to the model's save() method.
See AUTHORS.rst.