Anche se un campo è contrassegnato come 'editable=False'nel modello, vorrei che fosse visualizzato dalla pagina di amministrazione. Attualmente nasconde del tutto il campo .. Come si può ottenere questo risultato?
Risposte:
Usa campi di sola lettura . In questo modo (per django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields, ma quando l'ho aggiunto non readonly_fieldsè stato visualizzato fino a quando non l'ho aggiunto a entrambi e poi è apparso in admin.
Aggiornare
Questa soluzione è utile se si desidera mantenere il campo modificabile in Admin ma non modificabile ovunque. Se vuoi mantenere il campo non modificabile per tutto il tempo, la risposta di @Till Backhaus è l'opzione migliore.
Risposta originale
Un modo per farlo sarebbe utilizzare un'abitudine ModelFormin admin. Questo modulo può sovrascrivere il campo richiesto per renderlo modificabile. In tal modo manterrai editable=Falseovunque tranne Admin. Ad esempio (testato 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)