Как создать поле в Django Admin для чтения или не редактируемого на основе значения из другого поля?
Я использовал readonly_fields=('amount',)
, но это не исправляет мою проблему, так как мне нужно управлять ею на основе другого поля.
Создание поля только для чтения в Django Admin, на основе другого значения поля
Ответ 1
Вы можете переопределить метод admin get_readonly_fields
:
class MyAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj and obj.another_field == 'cant_change_amount':
return self.readonly_fields + ('amount',)
return self.readonly_fields
Ответ 2
Для заполнения одного поля от другого вам нужно добавить атрибут prepopulated_fields
в соответствующий класс ModelAdmin
. Например:
class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
Соответствующую документацию можно найти здесь.
Однако в версии django, которую я использую в данный момент (1.3), это создает ошибку, когда используется readonly_fields
.
Ответ 3
Объявить любые постоянно readonly_fields в теле класса, поскольку атрибут класса readonly_fields будет доступен из проверки