首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django管理站点中数据输入的最佳实践(同一模型上的不同ModelAdmin )

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

Stack Overflow用户
提问于 2013-02-07 06:37:44
回答 1查看 557关注 0票数 1

将自定义视图添加到Django管理站点以进行协同数据输入的最佳实践是什么?我有一个模型foo,它已经有一个ModelAdmin _FooAdmin_。这有利于编辑和调整数据,但为了便于大容量的数据输入,我想添加一个额外的视图,它有一个表单,例如,立即添加20 foo。

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

我在文档中看到,我可以覆盖get_urls(),但这似乎有点麻烦,因为我只想要在同一个模型上的两个稍微不同的ModelAdmin

有什么暗示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 15:36:25

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

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

代码语言:javascript
复制
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

用于不同目的的2 ModelAdmins:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14745117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档