У меня была ситуация, когда мне нужно было показать Inline на основе сайта администратора, на котором вы работали для данной истории.
Разбираясь с ответом alekwisnia, я смог получить динамические 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.