Django admin: как отобразить поле, помеченное как редактируемое = False 'в модели?

Даже если поле помечено как 'editable=False' в модели, я бы хотел, чтобы страница администратора отображала его. В настоящее время он полностью скрывает поле. Как это можно достичь?

Ответ 1

Используйте Readonly Fields. Так же (для django >= 1.2):

class MyModelAdmin(admin.ModelAdmin):
    readonly_fields=('first',)

Ответ 2

Обновление

Это решение полезно, если вы хотите, чтобы поле редактировалось в Admin, но не редактировалось везде. Если вы хотите, чтобы поле не редактировалось повсюду, лучшим вариантом является @Till Backhaus .

Оригинальный ответ

Один из способов сделать это - использовать пользовательский ModelForm в admin. Эта форма может переопределить необходимое поле, чтобы сделать его доступным для редактирования. Таким образом, вы сохраняете editable=False везде, кроме Admin. Напр. (тестируется с Django 1.2.3)

# models.py
class FooModel(models.Model):
    first = models.CharField(max_length = 255, editable = False)
    second  = models.CharField(max_length = 255)

    def __unicode__(self):
        return "{0} {1}".format(self.first, self.second)

# admin.py
class CustomFooForm(forms.ModelForm):
    first = forms.CharField()

    class Meta:
        model = FooModel
        fields = ('second',)

class FooAdmin(admin.ModelAdmin):
    form = CustomFooForm

admin.site.register(FooModel, FooAdmin)

Ответ 3

Ваши поля только для чтения должны быть в полях также:

fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')