#36555: Allow null for LogEntry.user
-------------------------------+--------------------------------------
Reporter: Siburg | Owner: (none)
Type: New feature | Status: closed
Component: contrib.admin | Version: dev
Severity: Normal | Resolution: wontfix
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Description changed by Siburg:
Old description:
> The `user` attribute of `LogEntry` is currently required. That causes two
> problems for me:
> 1. 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_create` a proxy user record for the `LogEntry` for 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'},
> )
> }}}
> 2. When a user who took an admin action is deleted then the admin history
> is effectively corrupted. Because of the `CASCADE` for `LogEntry.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.
New description:
The `user` attribute of `LogEntry` is currently required. That causes two
problems for me:
1. 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_create` a proxy user record for the `LogEntry` for 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'},
)
}}}
2. When a user who took an admin action is deleted then the admin history
is effectively corrupted. Because of the `CASCADE` for `LogEntry.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
[https://github.com/django/django/pull/19731] to show my proposed
approach. I will gladly continue work on that if this proposal is
accepted.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/36555#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070198ad0072c2-c92523d0-39af-49f8-8781-0b127d3d6d48-000000%40eu-central-1.amazonses.com.