Django - admin changeForm дополнительный контент рядом с полем - PullRequest
0 голосов
/ 01 сентября 2011

В админке 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 ]

1 голос
/ 03 февраля 2012

Да, есть, но способ 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} }

Это заменит все поля TextField с вашим пользовательским FooWidget.

0 голосов
/ 07 октября 2011

По-видимому, нет.

Мне пришлось сделать несколько

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

Чтобы добавить дополнительный контент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...