Réponses:
Utilisez les champs en lecture seule . Comme ça (pour django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, mais lorsque je l'ai ajouté, il readonly_fields
ne s'est pas affiché jusqu'à ce que je l'ai ajouté aux deux, puis il est apparu dans l'administrateur.
Mettre à jour
Cette solution est utile si vous souhaitez que le champ reste modifiable dans Admin mais non modifiable partout ailleurs. Si vous souhaitez que le champ ne soit pas modifiable tout au long, la réponse de @Till Backhaus est la meilleure option.
Réponse originale
Une façon de le faire serait d'utiliser une personnalisation ModelForm
dans l'administrateur. Ce formulaire peut remplacer le champ obligatoire pour le rendre modifiable. Ainsi, vous conservez 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)