Django admin: Modelde editable = False 'olarak işaretlenmiş bir alan nasıl görüntülenir?


100

'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:


198

Salt Okunur Alanları Kullanın . Bunun gibi (django> = 1.2 için):

class MyModelAdmin(admin.ModelAdmin):
    readonly_fields=('first',)

6
+1. Özellikle eğer yok Admin'deki hiç düzenlemeye alanını planlamak.
Manoj Govindan

Bu burada çalışmıyor (Django 2.0). Alan daha sonra yönetici arayüzünde görüntülenmez.
nerdoc

1
Hatanızı yeniden üretmek için örnek bir uygulama oluşturdum (django 2.0.8, python 3.5). Bu hala iyi çalışıyor. Belki uygulamanızda başka bir sorun var @nerdoc?
2018

Oops. Tipik hızlı atış. Test etmedim, kurulumumla ilgili bir sorun var gibi görünüyor. Teşekkürler ve üzgünüm.
nerdoc

2
Benim için yönetici onu eklediğimde çöktü fields, ancak onu readonly_fieldseklediğimde ikisine de ekleyene kadar görünmedi ve sonra yönetici olarak göründü.
owenfi

18

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=FalseYö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)

1
Bu, en azından django 1.6'da çalışmıyor Form, yönetici panelinde doğru görüntüleniyor, ancak bir formu kaydedip tekrar geri döndüğümde, form değeri yeniden varsayılan değerdir.
Euphorbium

6

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')

Teşekkürler, bu benim için sorunu çözdü. Ben basitçe readonly_fieldsen üste koyarım fieldsve düzenlenebilir alanlar olalım + readonly_fields(her ikisi de kodumdaki tuplelerdir; neden onları liste olarak ilan edelim anlamıyorum).
Federico S
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.