2010-10-19 11 views

Respuesta

132

Uso Readonly Fields. Al igual que (por Django> = 1.2):

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

+1. Especialmente si _no planea_ editar el campo en absoluto en Admin. –

12

actualización

Esta solución es útil si se desea mantener el campo editable en la administración, pero no se puede editar en cualquier otro lugar. Si desea mantener el campo no editable a lo largo de, entonces @Till Backhaus 'answer es la mejor opción.

respuesta original

Una forma de hacer esto sería utilizar una costumbre ModelForm de administración. Este formulario puede anular el campo requerido para hacerlo editable. De este modo, retiene editable=False en cualquier otro lugar que no sea Admin. Por ej. (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) 
+0

esto no funciona, al menos en Django 1.6 El formulario se muestra correctamente en el panel de administración, pero al guardar un formulario y volver a él de nuevo, las formas el valor está predeterminado de nuevo. – Euphorbium

Cuestiones relacionadas