2011-04-20 14 views
6

Birden çok yönetici sitem var, bu nedenle farklı kullanıcılar veritabanındaki nesneleri düzenleme konusunda farklı bir deneyim yaşarlar. Her yönetici sitesinde farklı bir nesne kümesi ve farklı bir stil vardır. Tüm bunlar, şablonlar ve ModelAdmin nesnelerini geçersiz kılarak yapılabilir.django'nun yönetici arayüzünde help_text'i nasıl geçersiz kılarım?

Farklı sitelerde farklı help_text sağlama konusunda çalışamıyorum. help_text her zaman doğrudan model alan tanımından alınır ve geçersiz kılmanın bir yolu yoktur.

Bir şey mi eksik, yoksa bu imkansız mı?

cevap

0

Hep form alanını değiştirebilir ModelAdmin yapıcı nitelikleri gibi bir şey:

 
    def __init__(self, *args, **kwargs): 
     super(ClassName, self).__init__(*args, **kwargs) 
     if siteA: 
      help_text = "foo" 
     else: 
      help_text = "bar" 
     self.form.fields["field_name"].help_text = help_text 
+0

bildiğim kadarıyla gördüğünüz gibi çalışmıyor - ModelAdmin.fields dizeleri sadece bir listesi: http://docs.djangoproject.com /en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields – Toby

+0

Hata! Aslında, Model Modelmin form özniteliği aracılığıyla kullanılabilir. Ayrıca, ebeveyn kurucusunun ilk olarak çağrıldığından emin olun. Düzenleme konusuna bakın. – Carlos

+0

Hala benim için çalışmıyor: "type object 'ModelForm' 'fields' özelliğine sahip değil" – Toby

-1

bu bir deneyin

class PropertyForm(models.ModelAdmin): 
    class Meta: 
     model = Property 
    def __init__(self, *args, **kwargs): 
     super(PropertyForm, self).__init__(*args, **kwargs) 
     for (key, val) in self.fields.iteritems(): 
      self.fields[key].help_text = 'what_u_want' 
(... self.form.fields ile self.fields değiştirmeniz gerekebilir)
1

Cerin haklı, ancak kodu iyi çalışmıyor (en azından Django 1.4 ile).

def get_readonly_fields(self, request, obj): 
    try: 
     field = [f for f in obj._meta.fields if f.name == 'author'] 
     if len(field) > 0: 
      field = field[0] 
      field.help_text = 'some special help text' 
    except: 
     pass 
    return self.readonly_fields 

Sen "yazar" ve ihtiyaçlarınıza göre help_text dize değiştirmek zorunda kalacaktır.

class MyForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['myfield'].help_text = 'New help text!' 

ardından ModelAdmin yeni formu kullanın:

class MyModel(admin.ModelAdmin): 
    ... 
    form = MyForm 

Bu İstediğinizi elde etmek temizleyici yoludur

12

Orada help_text yeni bir model formu oluşturmak ve geçersiz kılabilirsiniz form alanları zaten formlara ait olduğu için! Aşağıda benzer Django 1.9, içinde

+1

Tuhaf olarak, bu 'düzenlenebilir = Yanlış' alanları ile çalışmak için görünmüyor. Bunlar form.fields içinde bile görünmüyor ... – Cerin

+0

Merhaba @Cerin, evet haklısınız, salt okunur alanlar yönetici modeli formlarından her zaman hariç tutulur. Bunlar, salt okunur/devre dışı bırakılmış form girdileri ya da bunun gibi bir şey değil, yalnızca model alanın veya yöntemin str repr. – ppetrid

4

benim için çalışıyor

def get_form(self, request, obj=None, **kwargs): 
    form = super(MyAdmin, self).get_form(request, obj, **kwargs) 
    form.base_fields['my_field'].help_text = """ 
    Some helpful text 
    """ 
    return form 
+0

Bu, bunu yapmanın kullanışlı ve hızlı bir yoludur! – ihhcarus

İlgili konular