-
Пытаюсь сделать следующее - чтобы в стандартной админке при редактировании объекта, над формой редактирования показывались связанные с ним объекты.
План действий:
1. Копировать из templates/change_form.html в templates/myapp/myobj/change_form.html
2. Создать специальный тег, который дернет все необходимые мне данные и вставить его в этот шаблон
Мне бы хотелось узнать возможно ли это сделать? Есть ли какая статья с примером чего-нибудь подобного? -
Это называется InlineModelAdmin. Шаблоны нужно править только в самую последнюю очередь.
http://docs.djangoproject.com/en/dev//ref/contrib/admin/#inlinemodeladmin-objects -
не, не, не
Мне (заказчику) надо что бы под формой редактирования было красиво выведены объекты другой модели относящиеся к этому. Редактировать их не надо, просто посмотреть. -
Не факт, не факт. Функциональность inline-ов имеет свои ограничения. Вариант с копированием шаблонов в другое место и последующей правкой вполне возможен и опробован на себе. Правда, в моём случае нужно было не просто показывать связанные объекты, а вообще сделать интерфейс редактирования одной из моделей на ExtJS.
-
Алексей, так скажите каким Макаром вы это воплотили?
-
class SomeModelAdmin(admin.ModelAdmin):
list_filter = #...
list_display = #...
fieldsets = #...
def change_view(self, request, object_id, extra_context=None):
from core.views.admin import something
return something.someentry(request, object_id, extra_context, self)Затем, в модуле something:
Код не самый красивый, но работает. Выдернут из кода админки и изменён по вкусу.from django.forms import Media
some_media = Media(
js = (
'extjs/adapter/ext/ext-base.js',
'extjs/ext-all.js',
# ...
),
css = { 'all': ('extjs/resources/css/ext-all.css', 'extjs/resources/css/xtheme-default.css') }
)
class SomeEntry(Resource):
@render_to('custom_admin/some_form.html')
def read(self, request, object_id, extra_context=None, caller=None):
try:
obj = caller.model._default_manager.get(pk=object_id)
except caller.model.DoesNotExist:
obj = None
basic_context = {
'title': _('Change %s') % force_unicode(caller.model._meta.verbose_name),
'is_popup': False,
'media':mark_safe(some_media),
'show_delete': False,
'root_path': caller.admin_site.root_path,
'app_label': caller.model._meta.app_label,
'opts':caller.model._meta,
'original':obj,
'object_id':object_id,
'object_itself': mark_safe(serializer.serialize(obj,ensure_ascii=False,indent = 1,select_related=True)),
#эти две строки добавляют в контекст
'mode':'change' # "нестандартные" переменные
}
return basic_context
someentry = SomeEntry()
render_to - "почти стандартный" декоратор -), def read можно практически считать вьюхой, some_form.html - скопированный из админки change_form.html, изменённый затем под нужды.

