Функция readonly_fields не работает в Django Admin с моделями с табличной вставкой - PullRequest
0 голосов
/ 14 февраля 2019

readonly_fields функция работает правильно, когда я использую ее с отдельными моделями, но она не работает с моделями, которые tabularly inlined.

Может ли кто-нибудь помочь в понимании того, как помечать поля для чтения только тогда, когда мыиметь дело с моделями, встроенными друг в друга на странице admin?

Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2019

Если вы просто хотите установить поле «только для чтения» во встроенном режиме, вы можете сделать следующее:

class SomethingInline(admin.TabularInline):
    model = Something
    extra = 0
    readonly_fields = ('field1',)

Если вы хотите сделать весь встроенный набор форм только для чтения в родительской форме, вы можете попробоватьthis:

class SomethingInline(admin.TabularInline):
    model = Something
    extra = 0
    # Set all your fields here:
    readonly_fields = ('field1', 'field2', 'field3')

    # Or instead return all your fields here if this should be conditional:
    def get_readonly_fields(self, request, obj=None):
        return ('field1', 'field2', 'field3')

    def has_add_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

В последнем примере он по-прежнему будет отображать все значения для существующих встроенных элементов, но вы не можете добавлять / редактировать / удалять из интерфейса.это фактически сделает весь набор форм доступным только для чтения.

Примечание: я не переопределил has_change_permission() для возврата False, потому что это предотвратит показ существующих элементов.


Если вы не хотите указывать все свои поля вручную, внедрите get_readonly_fields() одного из решений здесь: Администратор Django - сделайте все поля доступными только для чтения

...