在我的一个对象的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');
我觉得不太可维护
答案 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');
添加额外内容