'editable=False'
Modelde bir alan işaretlenmiş olsa da , yönetici sayfasının onu göstermesini istiyorum. Şu anda alanı tamamen gizliyor .. Bu nasıl başarılabilir?
Yanıtlar:
Salt Okunur Alanları Kullanın . Bunun gibi (django> = 1.2 için):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, ancak onu readonly_fields
eklediğimde ikisine de ekleyene kadar görünmedi ve sonra yönetici olarak göründü.
Güncelleme
Bu çözüm, alanı Yönetici'de düzenlenebilir, ancak diğer yerlerde düzenlenemez durumda tutmak istiyorsanız kullanışlıdır. Alanı baştan sona düzenlenemez halde tutmak istiyorsanız, @Till Backhaus'un cevabı daha iyi bir seçenektir.
Orijinal Cevap
Bunu yapmanın bir yolu ModelForm
, yönetici içinde bir özel kullanmaktır . Bu form, düzenlenebilir hale getirmek için gerekli alanı geçersiz kılabilir. Böylelikle, editable=False
Yönetici dışındaki her yerde kalırsınız . Örneğin (Django 1.2.3 ile test edildi)
# 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)
Salt okunur alanlarınız aşağıdaki alanlarda da bulunmalıdır:
fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
readonly_fields
en üste koyarım fields
ve düzenlenebilir alanlar olalım + readonly_fields
(her ikisi de kodumdaki tuplelerdir; neden onları liste olarak ilan edelim anlamıyorum).