【问题标题】:django admin - how to override add new row in an inlined formsetdjango admin - 如何覆盖在内联表单集中添加新行
【发布时间】:2016-11-10 05:51:30
【问题描述】:

我使用 Media 类自定义了我的内联模型。 我想自定义内联字段集以实现两件事:

  • 为每一行添加一个按钮
  • 按下“添加新行”时从 javascript 代码运行

我已经尝试覆盖 tabular.html 并且无论我将覆盖的模板放在哪里,它都没有任何区别。

通过使用 change_form.html 我可以说我需要覆盖 inline_admin_formset.opts.template 但我不知道如何。 有什么想法吗?

【问题讨论】:

  • 如果您添加一些代码,您可能会得到更多响应?
  • 您想通过在每一行中添加新按钮并通过 javascript 代码实现什么目标?
  • 我有一个 javascript 代码,它根据其他字段的选择隐藏一些字段。我唯一的问题是它只在页面被保存和重新加载时才有效。我需要做的是在按下“添加新行”时运行该 javascript。

标签: django-admin


【解决方案1】:

我想通了。

  1. 复制 C:\Python27\Lib\site-packages\django\contrib\admin\templates\admin\edit_inline\tabular.html 到您的模板文件夹以将其用作自定义模板
  2. 在您的管理代码中,指定模板的路径:

class PurchaseInlineAdmin(admin.TabularInline):
    model = Purchase
    extra = 0
    template = "admin/my_app/shoppingcart/tabular.html"
  1. 修改您的自定义 tabular.html。我只显示底部:

<script type="text/javascript">
function beep(){
  alert('beep');
}

(function($) {
  $("#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr").tabularFormset({
    prefix: "{{ inline_admin_formset.formset.prefix }}",
    adminStaticPrefix: '{% static "admin/" %}',
    addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|capfirst as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
    deleteText: "{% trans 'Remove' %}"
  });
  $(".add-row a").click(beep);
})(django.jQuery);
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2012-04-19
    • 2011-07-25
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多