如何在django管理工具的其他部分移动模型?

时间:2014-12-21 18:57:41

标签: python django django-admin

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

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

我尝试了以下

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

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

1 个答案:

答案 0 :(得分:2)

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

1.7 中引入的Django migrations framework修复此问题,因此它会检测到模型已被移动(而不是删除和创建)。您可能需要使用与Southern相同的行来伪造迁移,这可以由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