Meskipun sebuah field ditandai seperti 'editable=False'
pada model, saya ingin halaman admin menampilkannya. Saat ini menyembunyikan bidang sama sekali .. Bagaimana ini bisa dicapai?
Jawaban:
Gunakan Bidang Hanya Baca . Seperti itu (untuk django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, tetapi ketika saya menambahkannya ke readonly_fields
dalamnya tidak muncul sampai saya menambahkannya ke keduanya dan kemudian muncul di admin.
Memperbarui
Solusi ini berguna jika Anda ingin agar bidang tetap dapat diedit di Admin tetapi tidak dapat diedit di tempat lain. Jika Anda ingin menyimpan bidang non-diedit seluruh kemudian @Till Backhaus' jawabannya adalah pilihan yang lebih baik.
Jawaban Asli
Salah satu cara untuk melakukannya adalah dengan menggunakan custom ModelForm
di admin. Formulir ini dapat menimpa bidang wajib agar dapat diedit. Dengan demikian Anda mempertahankan di editable=False
tempat lain selain Admin. Misalnya (diuji dengan 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)