#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.

Reply via email to