miałem sytuację, w której musiałem pokazać inline oparte na stronie administratora że byłeś na danej historii.
Rozwijając na odpowiedź alekwisnia za, udało mi się dostać dynamicznych inlines pracujących dla Django 1.3 za pomocą następującego kodu:
w rozjaśnionych/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)
Story/admin. py
class StoryAdmin(HighlightAdmin):
Należy pamiętać, że nie tylko manipuluję klas liniowych (HighlightInline), ale raczej zmieniam inline instances (HighlightInline (self.model, self.admin_site)). Dzieje się tak dlatego, że django zbudował już listę instancji wbudowanych na podstawie listy klas wbudowanych podczas początkowej budowy klasy admin.
Kiedyś to verbatim i działa, chociaż wymieniłem dwa powroty z 'powrócić super (BoxAdmin, self) .change_view (wniosek, object_id, adresu FORM_URL, extra_context)' i 'return super (BoxAdmin, self) .add_view (request, form_url, extra_context)' –