Django管理站点中数据输入的最佳实践(同一模型上的不同ModelAdmin)



向Django Admin站点添加自定义视图以进行协同数据输入的最佳做法是什么?我有一个foo模型,它已经有了一个ModelAdmin _FooAdmin_。这对于编辑和调整数据很好,但为了方便批量数据输入,我想添加一个额外的视图,它有一个可以同时添加20个foo的表单。

我不能用AlreadyRegistered: The model foo is already registered添加另一个ModelAdmin作为Django错误。

我在文档中看到,我可以覆盖get_urls(),但这似乎有点棘手,因为我只想在同一型号上使用两个略有不同的ModelAdmin

有什么提示吗?

我有模型InspectorCheck和同一模型的两个ModelAdmin类,一个显示删除字段等于False的记录,另一个显示已删除记录。

此函数创建从主模型继承的新代理模型类:

def create_proxymodel(model_from, name=None, attrs=None, meta=None):
    attrs, meta = (attrs if attrs else {}, meta if meta else {})
    class  Meta:
        proxy = True
        app_label = model_from._meta.app_label
    for k, v in meta.items():
        setattr(Meta, k, v)
    attrs.update({'__module__': '', 'Meta': Meta})
    newmodel = type(name, (model_from,), attrs)
    return newmodel

两个用于不同目的的ModelAdmins:

class InspectorCheckAdmin(admin.ModelAdmin):
    list_display = ('id', 'check_address', 'check_form', 'check_target_name')
class InspectorCheckAdminDeleted(admin.ModelAdmin): # or inherit from other ModelAdmin
    list_display = ('id', 'check_address', 'check_form', 'check_target_name', 'editor', 'updated')
    def queryset(self, request):
        return InspectorCheck.trash

#and in last step create and register both classes:
InspectorCheckDeleted = create_proxymodel(InspectorCheck, 'InspectorCheckDeleted', meta={
    'verbose_name': u'Inspector check (deleted)',
    'verbose_name_plural': u'Inspector checks (deleted)'}
)
admin.site.register(InspectorCheck, InspectorCheckAdmin)
admin.site.register(InspectorCheckDeleted, InspectorCheckAdminDeleted)

最新更新