【问题标题】:How to move models in other section in django admin tool?如何在 django 管理工具的其他部分移动模型?
【发布时间】:2015-02-19 23:02:44
【问题描述】:

如何将模型移动到 Django 管理站点的另一个部分?

在我的application 模块models.py 中,我的模型在名为“后端”的部分的管理工具中显示。我希望它们显示在名为“请求”的另一个部分中。

我尝试了以下

class TransportationRequest(models.Model):
   ...
   class Meta:
      app_label = _('Requests')
      db_table = 'backend_transportationrequest'

这是可行的,但现在我遇到了 South 的问题,因为它正在创建迁移以删除所有这些模型。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您当前的问题是您正在尝试更改app_labeldb_table,这最终会更改模型数据在数据库中的位置。默认情况下,数据库表生成为[app_label]_[model_name](在您的情况下为backend_transportationrequest),因此当您修改这两个时,South 检测到模型已被删除并再次创建,即使实际上并非如此.

    1.7 中引入的Django migrations framework应该修复了这个问题,所以它会检测到模型被移动(而不是被删除和创建)。您可能需要按照与 south 相同的方式进行迁移,这可以由 modifying the two mgirations it generates 完成,而不是实际删除和创建表,而是重命名它们。

    Django 目前不允许您轻松地做到这一点,因为管理站点希望每个注册的应用程序都有一个唯一的app_label。您可能在玩label property of your AppConfig 时很幸运,但特别不推荐这样做,而且历史上已知会引起严重的头痛。

    一种可能是创建一个您以前的模型的克隆,并仅使用它向 Django 管理员注册应用程序。您需要使用自定义app_labeldb_table 创建a proxy model。如果这不起作用(尽管应该),另一种选择是使用app_labeldb_table 将模型克隆为a unmanaged model

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 2010-11-25
      • 2013-08-02
      • 2018-04-12
      • 2015-06-18
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多