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.