【问题标题】:Django admin "save and view on site" buttonDjango 管理员“保存并在现场查看”按钮
【发布时间】:2012-01-25 15:11:59
【问题描述】:

Django 管理站点非常棒,我们在工作中经常使用它。我的问题是这个 - 我如何在底部添加一个额外的按钮,旁边是“保存”、“保存并继续编辑”等按钮,保存模型,然后重定向到可用的“现场查看”按钮对于已定义的模型,在表单的右上角?

提前致谢!

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    除了在 change_form 模板中添加按钮之外,您还需要覆盖 ModelAdmin 的 response_change 方法(和 response_add)。

    这样的事情应该可以工作:

    def response_change(self, request, obj):
      res = super(MyModelAdmin, self).response_change(request, obj)
      if "_preview" in request.POST:
        return HttpResponseRedirect('preview-url-here')
      else:
        return res
    

    【讨论】:

      【解决方案2】:

      要做到这一点,但也可以选择为某些模型表单显示/隐藏它,这就是我所做的:

      1。首先覆盖submit_line.html模板,在主模板文件夹下创建一个自定义模板:my_project/templates/admin/submit_line.html,从原始模板复制内容并将自定义按钮添加到submit-row块(默认情况下不会显示,因为它是设置为假):

      # submit_line.html
      
      {% load i18n admin_urls %}
      <div class="submit-row">
      {% block submit-row %}
      {% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %}
      ...
      ...
      ...
      {% if show_save_and_preview|default:False %}<input type="submit" value="{% trans 'Save and preview' %}" name="_preview">{% endif %}
      {% endblock %}
      </div>
      


      2. 接下来,为了简单地显示某些模型,只需覆盖您的 ModelAdmin 方法:

      changeform_view: 在模板上显示按钮。

      response_change: 设置保存后重定向到哪里。

      # admin.py
      
      class MyModelAdmin(admin.ModelAdmin):
          # ..
          # ..
      
          def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
              extra_context = extra_context or {}
              extra_context['show_save_and_preview'] = True
              return super(MyModelAdmin, self).changeform_view(request, object_id, extra_context=extra_context)
      
          def response_change(self, request, obj):
              res = super(MyModelAdmin, self).response_change(request, obj)
              if "_preview" in request.POST:
                  # used object's custom method "get_url()":
                  return HttpResponseRedirect(obj.get_url())
              else:
                  return res
      

      现在它会为这个特定的表单显示,对其他模型做同样的事情,只需覆盖上面的两个方法。

      【讨论】:

        猜你喜欢
        • 2012-01-29
        • 2012-04-30
        • 1970-01-01
        • 2012-10-17
        • 2010-10-29
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        相关资源
        最近更新 更多