Respostas:
Use campos somente leitura . Assim (para django> = 1,2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, mas quando eu adicionei ele readonly_fields
não apareceu até que eu o adicionei a ambos e então apareceu no admin.
Atualizar
Esta solução é útil se você deseja manter o campo editável no Admin, mas não editável em qualquer outro lugar. Se você quiser manter o campo não editável o tempo todo , a resposta de @Till Backhaus é a melhor opção.
Resposta Original
Uma maneira de fazer isso seria usar um custom ModelForm
no admin. Este formulário pode substituir o campo obrigatório para torná-lo editável. Assim, você mantém em editable=False
todos os outros lugares, exceto Admin. Por exemplo (testado com 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)