Opened 2 months ago
Last modified 4 weeks ago
#36555 closed New feature
Allow null for LogEntry.user — at Initial Version
| Reported by: | Siburg | Owned by: | |
|---|---|---|---|
| Component: | contrib.admin | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Siburg, Carsten Fuchs | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
The user attribute of LogEntry is currently required. That causes two problems for me:
- I have admin actions that can be performed by users as well as by periodically scheduled tasks (think Celery). For the latter case I now have to
get_or_createa proxy user record for theLogEntryfor that action. For example:proxy_user, created = User.objects.get_or_create( username='DataScrubTask', defaults={'first_name': 'Proxy user for LogEntry records from "archive_and_scrub_records" task'}, ) - When a user who took an admin action is deleted then the admin history is effectively corrupted. Because of the
CASCADEforLogEntry.user, their actions are deleted from the history.
To eliminate those problems I propose to add blank=True, null=True to the user field definition, and change CASCADE to SET_NULL.
To provide more flexibility for tracking actions, I also propose to add a CharField that can contain a text representation of who or what performed the action.
I have created a preliminary, incomplete PR to show my proposed approach. I will gladly continue work on that if this proposal is accepted.