diff options
| author | koresi <k.alv@protonmail.com> | 2024-09-25 03:57:20 +0200 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-10-24 09:18:55 +0200 |
| commit | b8e9cdf13b7ab6621926a5d2aad3e2bb745aae00 (patch) | |
| tree | 657a212a7ece49246c8ade12fff67e7045c358bb /docs/ref | |
| parent | ef28b05767482bf9c98acc19ffd1334f75165b5a (diff) | |
Fixed #22828 -- Warned that ModelAdmin get hooks return the property itself rather a copy.
Diffstat (limited to 'docs/ref')
| -rw-r--r-- | docs/ref/contrib/admin/index.txt | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt index 407dd88e71..716e3180db 100644 --- a/docs/ref/contrib/admin/index.txt +++ b/docs/ref/contrib/admin/index.txt @@ -1465,6 +1465,27 @@ templates used by the :class:`ModelAdmin` views: See also :ref:`saving-objects-in-the-formset`. +.. warning:: + + All hooks that return a ``ModelAdmin`` property return the property itself + rather than a copy of its value. Dynamically modifying the value can lead + to surprising results. + + Let's take :meth:`ModelAdmin.get_readonly_fields` as an example:: + + class PersonAdmin(admin.ModelAdmin): + readonly_fields = ["name"] + + def get_readonly_fields(self, request, obj=None): + readonly = super().get_readonly_fields(request, obj) + if not request.user.is_superuser: + readonly.append("age") # Edits the class attribute. + return readonly + + This results in ``readonly_fields`` becoming + ``["name", "age", "age", ...]``, even for a superuser, as ``"age"`` is added + each time non-superuser visits the page. + .. method:: ModelAdmin.get_ordering(request) The ``get_ordering`` method takes a ``request`` as parameter and |
