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 masque complètement le champ .. Comment y parvenir?
Utilisez Champs en lecture seule . Comme ça (pour Django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
Mise à 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 partout alors @Till Backhaus ' réponse est la meilleure option.
Réponse originale
Une façon de le faire serait d'utiliser un ModelForm
personnalisé dans admin. Ce formulaire peut remplacer le champ requis pour le rendre modifiable. Vous conservez ainsi editable=False
partout ailleurs, sauf 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)
Vos champs en lecture seule doivent également être dans des champs:
fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')