代码之家  ›  专栏  ›  技术社区  ›  Jason Jenkins

向django模型的管理表单添加模型范围的帮助文本

  •  42
  • Jason Jenkins  · 技术社区  · 14 年前

    help_text My_Model 在里面 My_App 我希望能够添加一些HTML,上面写着“有关我的模型的更多信息,请参阅 http://example.com “以便提供指向内部文档wiki的链接。

    有什么简单的方法可以实现这一点,或者我需要为模型创建一个自定义的管理表单吗?如果是的话,你能给我举个例子说明我会怎么做吗?

    5 回复  |  直到 14 年前
        1
  •  33
  •   airstrike SilentGhost    11 年前

    有一个相当简单,但没有充分记载的方式来实现这一点。

    在Admin类中定义render\u change\u表单

    # admin.py
    class CustomAdmin(admin.ModelAdmin):
        def render_change_form(self, request, context, *args, **kwargs):
            # here we define a custom template
            self.change_form_template = 'admin/myapp/change_form_help_text.html'
            extra = {
                'help_text': "This is a help message. Good luck filling out the form."
            }
    
            context.update(extra)
            return super(CustomAdmin, self).render_change_form(request,
                context, *args, **kwargs)
    

    创建自定义模板

    # change_form_help_text.html
    {% extends 'admin/change_form.html' %}
    {% block form_top %} 
    {% if help_text %}<p>{{ help_text }}</p>{% endif %}
    {% endblock %}
    


    更多信息请访问:

    http://davidmburke.com/2010/05/24/django-hack-adding-extra-data-to-admin-interface/

    http://code.djangoproject.com/wiki/NewformsHOWTO#Q:HowcanIpassextracontextvariablesintomyaddandchangeviews

        2
  •  69
  •   Mike DeSimone    14 年前

    使用管理员的 fieldsets :

    class MyAdmin(admin.ModelAdmin):
        fieldsets = (
            (None, {
                'fields': ('first', 'second', 'etc'),
                'description': "This is a set of fields group into a fieldset."
            }),
        )
        # Other admin settings go here...
    

    在一个管理员中可以有多个字段集。每个都可以有自己的标题(替换 None 'classes': ('collapse',), wide

    description 考虑字符串 安全的 ,所以不要把任何未清理的数据放在那里。这样做的目的是,您可以根据需要将标记放在其中(如链接),但是,块格式(如 <ul>

        3
  •  3
  •   stormlifter    13 年前

    如果我明白你想要什么下面的代码应该做你想要的。

    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
    

    这是一个使用某些逻辑修改重写窗体的示例。所以你只要把它放到你的ModelAdmin构造函数中,然后你就重写了它。

        5
  •  0
  •   nemesisdesign    4 年前

    help_text

    from django.utils.translation import gettext_lazy as _
    
    class AuthorForm(ModelForm):
        class Meta:
            model = Author
            fields = ('name', 'title', 'birth_date')
            labels = {
                'name': _('Writer'),
            }
            help_texts = {
                'name': _('Some useful help text.'),
            }
            error_messages = {
                'name': {
                    'max_length': _("This writer's name is too long."),
                },
            }
    

    https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#overriding-the-default-fields

        6
  •  -3
  •   Colin Wood    12 年前

    作为这个问题的更新。可以在模型中使用 help_text

    https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.help_text