Django admin: Comment afficher un champ marqué comme éditable = False dans le modèle?

Même si un champ est marqué comme 'editable=False' dans le modèle, j’aimerais que la page d’administration l’affiche. Actuellement, cela cache complètement le champ. Comment cela peut-il être réalisé?

Utilisez les champs Readonly . Comme ça (pour django> = 1.2):

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

Mettre à jour

Cette solution est utile si vous souhaitez conserver le champ modifiable dans Admin mais non modifiable partout ailleurs. Si vous voulez garder le champ non modifiable tout au long, la réponse de @Till Backhaus est la meilleure option.

Réponse originale

Une façon de procéder serait d’utiliser un ModelForm personnalisé dans admin. Ce formulaire peut remplacer le champ requirejs pour le rendre modifiable. Vous conservez donc editable=False partout ailleurs que Admin. Par exemple (testé avec 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)