ale*_*nia 13 django django-forms django-admin inlines
我需要单独的视图来添加和更改页面.在添加页面中,我想从内联formset中排除一些字段.我准备了两个TabularInline类,其中一个包含属性'exclude'.我尝试使用它们如下:
class BoxAdmin(admin.ModelAdmin):
def change_view(self, request, obj_id):
self.inlines=[ItemChangeInline,]
return super(BoxAdmin, self).change_view(self.request, obj_id)
def add_view(self, request):
self.inlines=[ItemAddInline,]
return super(BoxAdmin, self).add_view(self, request)
Run Code Online (Sandbox Code Playgroud)
没有效果(根本没有显示内联).
And*_*tti 17
它适用于Django 1.5+,看起来很优雅:
// admin.py
class BoxAdmin(ModelAdmin):
inlines = ()
def change_view(self, request, object_id, form_url='', extra_context=None):
self.inlines = (ItemChangeInline, )
return super(BoxAdmin, self).change_view(request, object_id)
def add_view(self, request, form_url='', extra_context=None):
self.inlines = (ItemAddInline, )
return super(BoxAdmin, self).add_view(request)
Run Code Online (Sandbox Code Playgroud)
希望它对任何人都有用
这是似乎工作的代码:
class BoxAdmin(admin.ModelAdmin):
def change_view(self, request, obj_id):
self.inlines=[ItemChangeInline,]
for inline_class in self.inlines:
inline_instance = inline_class(self.model, self.admin_site)
self.inline_instances.append(inline_instance)
return super(BoxAdmin, self).change_view(request, obj_id)
def add_view(self, request):
self.inlines=[ItemAddInline,]
for inline_class in self.inlines:
inline_instance = inline_class(self.model, self.admin_site)
self.inline_instances.append(inline_instance)
return super(BoxAdmin, self).add_view(request)
Run Code Online (Sandbox Code Playgroud)
然而,这看起来不优雅,导致这部分:
for inline_class in self.inlines:
inline_instance = inline_class(self.model, self.admin_site)
self.inline_instances.append(inline_instance)
Run Code Online (Sandbox Code Playgroud)
是来自admin.ModelAdmin的init方法的复制粘贴(因此它运行两次).
为什么在 add_view 中你有.add_view(self, request),而在 Change view 中你有.change_view(self.request, ..)?我相信,您在 add_view 中不需要 self ,因为您使用了 super 。
| 归档时间: |
|
| 查看次数: |
9222 次 |
| 最近记录: |