Как создать поле в 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 будет доступен из проверки