Mimo że pole jest zaznaczone tak, jak 'editable=False'
w modelu, chciałbym, aby strona administratora je wyświetliła. Obecnie całkowicie ukrywa to pole. Jak to osiągnąć?
Odpowiedzi:
Użyj pól tylko do odczytu . Tak (dla django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, ale kiedy dodałem go do readonly_fields
niego, nie pojawił się, dopóki nie dodałem go do obu, a potem pojawił się w admin.
Aktualizacja
To rozwiązanie jest przydatne, jeśli chcesz, aby pole było edytowalne w panelu Admin, ale nie można go było edytować w innych miejscach. Jeśli chcesz, aby pole nie było edytowalne przez cały czas, odpowiedź @Till Backhaus jest lepszą opcją.
Oryginalna odpowiedź
Jednym ze sposobów byłoby użycie niestandardowego ModelForm
w panelu administracyjnym. Ten formularz może zastąpić wymagane pole, aby umożliwić jego edycję. W ten sposób zachowujesz editable=False
wszędzie poza administratorem. Na przykład (testowane z 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)