Django abstract model that adds admin fields (created_on/by, laste_edited_on/by) to an existing model
Project description
Django Model Admin Fields
Django is one of the most popular Python web frameworks today. Importantly it provides an ORM permitting us to define models as Python classes that Django maps to a databse representations for us.
A very common, nearly ubiquitous desire/need I have is to keep some record against all database objects as to who created them, when and who last edited them and when. Very basic tracking fields. Given the ubiquity of the need it was best implemented as an abstrack model that my models derive from.
The basic Django example of model:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
can be extended thusly:
from django.db import models
from django_model_admin_fields import AdminModel
class Person(AdminModel):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
which has the simple effect of adding the following fields to the model silently:
created_by = models.ForeignKey(User, verbose_name='Created By',
related_name='%(class)ss_created',
editable=False, null=True, on_delete=models.SET_NULL)
created_on = models.DateTimeField('Time of Creation', editable=False, null=True)
created_on_tz = TimeZoneField('Time of Creation, Timezone',
default=settings.TIME_ZONE, editable=False)
last_edited_by = models.ForeignKey(User, verbose_name='Last Edited By',
related_name='%(class)ss_last_edited',
editable=False, null=True, on_delete=models.SET_NULL)
last_edited_on = models.DateTimeField('Time of Last Edit', editable=False, null=True)
last_edited_on_tz = TimeZoneField('Time of Last Edit, Timezone',
default=settings.TIME_ZONE, editable=False)
(a more precise description of course is in __init__.py
)
Importantly it also overrides the mmodel save()
method to set those six fields before calling super().save()
(i.e. the default save method) and thus these fields are automatically managed.
The currently active Django timezone is saved as well to support sensible human interpretation of the saved times (as Django's DateTimeField) is not timezone aware.
To make use of that easier two properties are also added to the model: created_on_local
and last_edited_on_local
which are timezone aware versions of the naive created_one
and last_edited_on
fields.
To illustrate use of the Person example above:
person = Person()
person.first_name = "John"
person.last_name = "Smith"
person.save
print(f"{person.first_name} {person.last_name}")
print(f"was created by {person.created_by} on {person.created_on_local}.")
Of course to make use of local times, you need to activate the timezone that the creating user is in. To that you need to know it first. The Javascript library jstz is useful in that regard for detecting the users timezone and there's a great guide on setting timezones in Django inthe django documentation proper.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django_model_admin_fields-0.1.tar.gz
.
File metadata
- Download URL: django_model_admin_fields-0.1.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 509dbfc71806a79eed9a3f5cf6ebfed2ca489c35f3800882a5eacaa29e75bdb6 |
|
MD5 | b1345d117bb27ca8b643094dacc634da |
|
BLAKE2b-256 | 2de1451586beccc42db698c770c849fcf9c82637bc1690ce73843f9ce95e2265 |
File details
Details for the file django_model_admin_fields-0.1-py3-none-any.whl
.
File metadata
- Download URL: django_model_admin_fields-0.1-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 848e71ece9cf5af9b8f72873ced7816d9988d8932a75ff7e7baf47de78b7f8d3 |
|
MD5 | 1f885e861f4dfa897f2196a29adf0e67 |
|
BLAKE2b-256 | 9084911f5fdbf562ed5306c5b480ab6e5733f86acc996db15324359c54bc75aa |