У меня была ситуация, когда мне нужно было показать Inline, основанный на сайте администратора, на котором вы работали для данной истории.
Мне удалось получить динамические inline, работающие на Django 1.3, используя следующий код:
В основных моментах / admin.py
class HighlightInline(generic.GenericTabularInline):
model = Highlight
extra = 1
max_num = 4
fields = ('order', 'highlight')
template = 'admin/highlights/inline.html'
class HighlightAdmin(admin.ModelAdmin):
def regulate_highlight_inlines(self):
highlights_enabled = Setting.objects.get_or_default('highlights_enabled', default='')
highlight_inline_instance = HighlightInline(self.model, self.admin_site)
highlight_found = any(isinstance(x, HighlightInline) for x in self.inline_instances)
if highlights_enabled.strip().lower() == 'true':
if not highlight_found:
self.inline_instances.insert(0, highlight_inline_instance)
else:
if highlight_found:
self.inline_instances.pop(0)
print self.inline_instances
def change_view(self, request, object_id, form_url='', extra_context=None):
self.regulate_highlight_inlines()
return super(HighlightAdmin, self).change_view(request, object_id)
def add_view(self, request, form_url='', extra_context=None):
self.regulate_highlight_inlines()
return super(HighlightAdmin, self).add_view(request, form_url, extra_context)
В истории / admin.py
class StoryAdmin(HighlightAdmin):
Одна вещьСледует отметить, что я не просто манипулирую встроенными классами (HighlightInline), но я изменяю встроенные экземпляры (HighlightInline (self.model, self.admin_site)).Это связано с тем, что django уже создал список встроенных экземпляров на основе списка встроенных классов во время первоначального создания класса admin.