如何将模型移动到Django管理站点的另一部分?
在我的application
模块models.py
中,我的模型显示在管理工具的“后端”部分。我希望它们以“请求”的名义显示在另一部分中。
我尝试了以下
class TransportationRequest(models.Model):
...
class Meta:
app_label = _('Requests')
db_table = 'backend_transportationrequest'
这是有效的,但现在我遇到了南方的问题,因为它正在创建迁移以删除所有这些模型。
答案 0 :(得分:2)
您当前的问题是您正在尝试更改app_label
和db_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_label
和db_table
创建a proxy model。如果这不起作用(尽管它应该),另一种选择是使用app_label
和db_table
将模型克隆为a unmanaged model。