У меня есть несколько админ-сайтов, поэтому разные пользователи получают другой опыт редактирования объектов в базе данных. Каждый админ-сайт имеет другой набор объектов и другой стиль. Все это можно сделать, переопределив шаблоны и объекты ModelAdmin.
Я не могу решить, как предоставить различные help_text через разные сайты. help_text всегда берется прямо из определения поля модели, и, похоже, не существует способа переопределить его.
Я что-то упускаю, или это невозможно?
Вы можете создать новую модель и переопределить help_text:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['myfield'].help_text = 'New help text!'
то используйте новую форму в ModelAdmin:
class MyModel(admin.ModelAdmin):
...
form = MyForm
Это более чистый способ добиться того, чего вы хотите, поскольку поля формы принадлежат формам в любом случае!
В Django 1.9, как показано ниже, работает для меня
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
Керин прав, но его код не работает (по крайней мере, с Django 1.4).
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
Вам нужно будет изменить строку "author" и help_text
в соответствии с вашими потребностями.
Вы всегда можете изменить атрибуты поля формы в конструкторе ModelAdmin, например:
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
Попробуйте это (возможно, потребуется заменить self.fields на self.form.fields...)
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'
editable=False
полями. Они даже не появляются в form.fields ...