如何在 Django Admin 中对模型进行分组?

25
假设我有一组模型,必须在管理员中与另一组模型保持(视觉上)分开。目前它们是按字母顺序排列的,这使它们混乱不堪。我想这样组织它们:

第1组: (自定义命名)

  • 模型 1
  • 模型 4

第2组: (自定义命名)

  • 模型 2
  • 模型 3

我似乎找不到如何做到这一点的文档。这可能吗?

1
我认为最简单的方法是创建两个不同的应用Group1和Group2。 - het.oosten
3个回答

32

如果你只是想实现一些标记,我认为将业务逻辑即应用程序分开不是正确的方法。相反,我找到了Python包django-modeladmin-reorder,它让你可以轻松地实现这一点。你可以结合它标注应用程序和重新排列模型的特性,将一个应用程序的模型分组在管理员中。遵循安装说明后,将类似于以下内容添加到你的settings.py

ADMIN_REORDER = (
    # First group
    {'app': 'myapp', 'label': 'Group1',
     'models': ('myapp.Model_1',
                'myapp.Model_4',)
    },
    # Second group: same app, but different label
    {'app': 'myapp', 'label': 'Group2',
     'models': ('myapp.Model_2',
     'myapp.Model_3',)
    },)

1
这个软件包看起来好像已经多年没有得到支持了.. 有人尝试过吗? - davideghz
5
可以,它适用于Django 2.0。我正在使用Django 2.0.3版本。请注意,应用程序名称是在您的apps.py文件中定义的XxxConfig(AppConfig)类中定义的名称。 - david euler
我不是很喜欢安装非必要的软件包。为什么不在每个模型中的verbose_name_plural中编码枚举?例如:class Model_1(..):class Meta: verbose_name_plural = "93 配置:办公室名称" - VengaVenga
@VengaVenga 因为那是一种黑客行为。而且能够使用漂亮的标签放置组标题,以便分离,也是非常好的。 - Jordan

-1
请确保您在 ADMIN_REORDER 中的模型名称与 models.py 文件中的名称完全一致
对我来说,使用 Django==3.1.5 没有任何问题。这是我的 settings.py 文件中的示例代码。
ADMIN_REORDER = (
# 'webapp',

#### First group
{
    'app': 'webapp', 
    'label': 'group1',
    'models': (
        'webapp.ProductModelName_1', 
        'webapp.ProductModelName_2', 
        'webapp.ProductModelName_3',

    )
},
# Second group: same app, but different label
{
    'app': 'webapp', 
    'label': 'group2',
    'models': (
        'webapp.Model_X', 
        'webapp.Model_Y',
    )
},
)

-6
你需要创建两个应用程序。第一个应用程序 == 组1。第二个应用程序 == 组2。
然后,你需要在新应用程序中创建代理模型。就像这样。
class ProxyReview(Review):
    class Meta:
        proxy = True    
        # If you're define ProxyReview inside review/models.py,
        #  its app_label is set to 'review' automatically.
        # Or else comment out following line to specify it explicitly               
        # app_label = 'review'

        # set following lines to display ProxyReview as Review
        # verbose_name = Review._meta.verbose_name
        # verbose_name_plural = Review._meta.verbose_name_plural


# in admin.py
admin.site.register(ProxyReview)

19
将一个应用程序拆分成两个对于调整管理员页面的显示来说过于复杂。 - Turtles Are Cute
有时候这是最优雅的解决方案!我经常使用django-modeladmin-reorder,但它肯定有其缺点。 - frnhr

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