Как сделать некоторые строки 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