Respuestas:
Utilice campos de solo lectura . Así (para django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, pero cuando lo agregué, readonly_fields
no apareció hasta que lo agregué a ambos y luego apareció en el administrador.
Actualizar
Esta solución es útil si desea mantener el campo editable en Admin pero no editable en cualquier otro lugar. Si desea mantener el campo no editable en todo momento, la respuesta de @Till Backhaus es la mejor opción.
Respuesta original
Una forma de hacer esto sería usar un archivo personalizado ModelForm
en admin. Este formulario puede anular el campo obligatorio para hacerlo editable. De este modo, conserva en editable=False
todos los demás lugares excepto en Admin. Por ejemplo (probado con 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)