Django - 管理员更改字段旁边的额外内容

时间:2011-09-01 13:59:13

标签: javascript html django django-admin

在我的一个对象的admin change_form中,我需要在某个字段中有额外的内容(比如在这个字段上做一些javascript修改的按钮)

我查看了原始的change_form模板,我看到我可以向块content添加内容但是如何在某个字段旁边添加?

示例:

<!-- ... -->
<div class="form-row part">
  <div>
    <label for="id_part" class="required">Part:</label>
    <input id="id_part" type="text" class="vIntegerField" value="1" name="part" />
  </div>
</div>
<div class="form-row text">
  <div>
    <label for="id_text" class="required">Text:</label>
    <textarea id="id_text" rows="10" cols="40" name="text" class="vLargeTextField"></textarea>
  </div>
</div>
<div class="form-row sequence">
  <div>
    <label for="id_sequence" class="required">Sequence:</label>
    <input id="id_sequence" type="text" class="vIntegerField" value="3" name="sequence" />
  </div>
</div>
<!-- ... -->

会变成

<!-- ... -->
<div class="form-row part">
  <div>
    <label for="id_part" class="required">Part:</label>
    <input id="id_part" type="text" class="vIntegerField" value="1" name="part" />
  </div>
</div>
<div class="form-row text">
  <div>
    <label for="id_text" class="required">Text:</label>
    <textarea id="id_text" rows="10" cols="40" name="text" class="vLargeTextField"></textarea>
  </div>
<!-- extra content start -->
  <div class="markup-tools">
    <input type="button" class="tool1" value="Tool 1" />
    <input type="button" class="tool2" value="Tool 2" />
    <input type="button" class="tool3" value="Tool 3" />
  </div>
<!-- extra content end -->
</div>
<div class="form-row sequence">
  <div>
    <label for="id_sequence" class="required">Sequence:</label>
    <input id="id_sequence" type="text" class="vIntegerField" value="3" name="sequence" />
  </div>
</div>
<!-- ... -->

有没有办法做到这一点,而不必像JS那样追加内容:

$('.form-row.text').append('the content');

我觉得不太可维护

2 个答案:

答案 0 :(得分:1)

是的,有,但js方式更容易。

您需要创建自定义窗口小部件类,然后设置特定字段以使用该窗口小部件。例如:

class FooWidget(Widget):
    def render(self, *args, **kwargs):
        output = super(FooWidget, self).render(*args, **kwargs)
        output += "<p>I'm a widget!</p>"
        return mark_safe(output)

class BarAdmin(ModelAdmin):
    formfield_overrides = { models.TextField: {'widget': FooWidget} }

这将使用您的自定义FooWidget覆盖所有TextField字段。

答案 1 :(得分:0)

显然不是。

我必须做几次

$('.form-row.text').append('the content');

添加额外内容