我有多个管理站点,因此不同的用户可以获得编辑数据库中对象的不同体验。每个管理站点都有一组不同的对象公开,并有不同的样式。所有这些都可以通过覆盖模板和ModelAdmin对象来完成。如何覆盖django的管理界面中的help_text
我无法解决如何通过不同的网站提供不同的help_text。 help_text总是直接从模型字段定义中获取,并且似乎没有办法覆盖它。
我错过了什么,或者这是不可能的?
我有多个管理站点,因此不同的用户可以获得编辑数据库中对象的不同体验。每个管理站点都有一组不同的对象公开,并有不同的样式。所有这些都可以通过覆盖模板和ModelAdmin对象来完成。如何覆盖django的管理界面中的help_text
我无法解决如何通过不同的网站提供不同的help_text。 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.form.fields更换self.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'
Cerin是对的,但他的代码不能很好地工作(至少在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
您必须更改“作者”和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
这是一个非常有用且快速的方法! – ihhcarus 2016-12-27 00:45:40
不,据我所看到的工作 - ModelAdmin.fields只是一个字符串列表:http://docs.djangoproject.com /en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields – Toby 2011-04-20 16:17:14
糟糕!实际上,字段将通过ModelAdmin的表单属性提供。另外,确保首先调用父构造函数。请参阅编辑。 – Carlos 2011-04-20 16:49:00
仍然不适用于我: “type object'ModelForm'has no attribute'fields'” – Toby 2011-04-26 11:38:41