Динамические (JS / Ajax) полевые обновления с интерфейсом администратора Django - PullRequest
1 голос
/ 15 июня 2011

Это может быть сложным объяснением. Вот и все.

В рамках этой проблемы есть две модели, Asset и AssetGroup. AssetGroup содержит информацию о «группе» активов (например, бренд, модель, характеристики), а Asset содержит информацию об отдельных активах (например, стоимость, дата покупки, причина покупки, группа активов).

Очевидно, что существует связь между двумя моделями (например, активы принадлежат определенной «группе»).

Таким образом, сотрудник этой компании собирается добавить продукт в базу данных, используя интерфейс администратора Django, и ему нужно выбрать группу, к которой должен принадлежать их актив. Поле выбора для группы активов показывает метод __unicode__ для каждой группы активов (конечно), а метод __unicode__, который я использую, представляет собой объединение бренда, модели и подмодели группы активов:

def __unicode__(self):
    return self.asset_brand + " " + self.asset_product + " - " + self.asset_subproduct

Достаточно просто.

Теперь в таблице AssetGroup есть несколько записей, которые заканчиваются одним и тем же выводом метода __unicode__, например, Есть два предмета с:

  • asset_brand = 'Apple'
  • asset_product = 'Macbook Pro'
  • asset_subproduct = 'Mid-2009'

так что они выглядят точно так же. Причина, по которой они являются отдельными записями, заключается в том, что в AssetGroup есть поле с именем asset_description, которое содержит дополнительную информацию о AssetGroup (например, первый объект Macbook Pro AssetGroup может иметь 4 ГБ ОЗУ, и второй объект AssetGroup может иметь 8 ГБ ОЗУ.

Итак, очевидно, что два разных продукта выглядят одинаково в окне выбора, когда клиент вводит актив в базу данных. Я хотел бы (динамически, с помощью JS) показать выбранные AssetGroup asset_description клиенту, когда они вводят Asset в базу данных.

Есть ли в Джанго что-нибудь, что делает это? В противном случае, я думаю, я мог бы перепроектировать свою базу данных, но я действительно не хочу.

1 Ответ

2 голосов
/ 15 июня 2011

Вы можете настроить шаблон, который администратор Django использует для вашей конкретной модели.Вам не нужно писать весь шаблон, вместо этого вы можете просто добавить необходимую вам javascript в теги шаблона {% block extrahead%}.И используйте jQuery для настройки обработки событий.Django использует jQuery в интерфейсе администратора под django.jQuery.

Чтобы django мог найти ваш собственный шаблон, вы должны поместить его в нужное место.Взгляните на раздел Настройка шаблонов администратора здесь: http://www.djangobook.com/en/1.0/chapter17/

Вот только краткий пример:

{% block extrahead %}

<script type="text/javascript" src="{{ ADMIN_MEDIA_PREFIX }}jquery.min.js"></script>

<script type="text/javascript">
  django.jQuery(function($) {
    // set your handlers, etc.
  });
</script>
{% endblock %}
...