Django中一个模型的两个管理类

7 投票
1 回答
1884 浏览
提问于 2025-04-18 01:12

我需要在两个管理类中使用同一个模型。这个模型是:

ITEM_STATUSES = (
('pending', _('Waiting approval')),
('approved', _('Approved')),
('declined', _('Declined'))
)

class Item(models.Model):
title = models.CharField(max_length=64)
description = models.TextField(blank=True)
...
status = models.CharField(max_length=32, choices=ITEM_STATUSES)
...

我想用它两次。首先,我想显示所有的模型,像这样:

class ItemAdmin(admin.ModelAdmin):
  pass

admin.site.register(Item, ItemAdmin)

另外,我还想要一个新页面,只显示状态为'pending'的模型,像这样:

class ItemAdminPending(admin.ModelAdmin):
def queryset(self, request):
    qs = super(ItemAdminPending, self).queryset(request)
    return qs.filter(status='pending')

admin.site.register(Item, ItemAdminPending)

但当然我遇到了一个错误:已经注册:模型Item已经被注册过了。

有什么建议吗?希望能得到帮助。

1 个回答

9

非常接近了!你需要在你的 models.py 文件中添加一个 代理模型

class ItemPending(Item):
    class Meta:
        proxy = True

然后像这样注册第二个 ModelAdmin

admin.site.register(ItemPending, ItemAdminPending)

撰写回答