一个模型Django有两个管理员类是什么意思?

7
我需要在两个管理类的上下文中使用一个模型。所以,这是我的模型:
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)
...

我可以帮助您翻译。以下是关于IT技术的内容,请您检阅并确认翻译准确无误。

我想使用它两次。首先,我想展示所有的模型,例如:

class ItemAdmin(admin.ModelAdmin):
  pass

admin.site.register(Item, ItemAdmin)

同时,我想要一个新页面,只展示状态为“待处理”的模型,像这样:
class ItemAdminPending(admin.ModelAdmin):
def queryset(self, request):
    qs = super(ItemAdminPending, self).queryset(request)
    return qs.filter(status='pending')

admin.site.register(Item, ItemAdminPending)

但是我遇到了一个错误:

AlreadyRegistered: 模型 Item 已经被注册过了

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

1个回答

9

非常接近!您需要在models.py中添加一个代理模型

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

然后像这样注册第二个ModelAdmin

admin.site.register(ItemPending, ItemAdminPending)

还有一个答案提供了一个实用函数,可以DRY地完成这个任务 https://dev59.com/sXE95IYBdhLWcg3wn_f2#2228821 - jenniwren
当我添加 'using proxy true' 时,我就能够删除该对象。 - chetan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接