Как сделать некоторые строки Django доступными только для чтения

Я использую django admin и добавляю TabularInline в свой класс ModelAdmin. Думаю, что Author и инлайн это Books. Как сделать так, чтобы некоторые из этих строк отображались только для чтения, а некоторые - для редактирования, основываясь на определенных характеристиках экземпляра модели для каждой конкретной строки? Скажем, я хочу, чтобы все книги, написанные до 2001 года, были доступны только для чтения. А все книги, написанные после этого, - редактируемыми.

Я пробовал переопределить has_change_permission() и использовать параметр obj, но он получает родителя, а не экземпляр этого конкретного инлайна.

Пробовали ли вы переопределить методы get_readonly_fields в вашем tabularinline?

Пример:

class AuthorBookInline(admin.TabularInline):
    model = Book
    extra = 0

    def get_readonly_fields(self, request, obj=None):
        readonly_fields = super().get_readonly_fields(request, obj)
        if obj:
            if obj.created_ts.year <= 2001:
                readonly_fields.extend(self.fields)
        return readonly_fields
Вернуться на верх