tôi đã có một tình huống mà tôi cần phải hiển thị một Inline dựa trên site admin mà bạn đang ở trong một câu chuyện cụ thể.
Mở rộng về câu trả lời alekwisnia, tôi đã có thể để có được inlines động làm việc cho Django 1.3 sử dụng đoạn mã sau:
Trong nổi bật/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)
Trong câu chuyện/admin. py
class StoryAdmin(HighlightAdmin):
Điều cần lưu ý là tôi không chỉ thao túng trong các lớp dòng (HighlightInline) nhưng thay vào đó, tôi đang thay đổi các cá thể nội tuyến (HighlightInline (self.model, self.admin_site)). Điều này là do django đã xây dựng một danh sách các cá thể nội tuyến dựa trên danh sách các lớp nội tuyến trong quá trình xây dựng ban đầu của lớp quản trị.
Nguồn
2014-06-15 14:27:08
tôi đã sử dụng nó đúng nguyên văn và nó hoạt động, tôi đã thay thế mặc dù hai trở lại với 'trở lại siêu (BoxAdmin, tự) .change_view (yêu cầu, object_id, form_url, extra_context)' và 'return super (BoxAdmin, self) .add_view (yêu cầu, form_url, extra_context)' –