如何将模型移动到 Django 管理站点中的另一个部分?
在我的application
模块models.py
中,我的模型显示在管理工具中名为“后端”的部分中。我希望它们以“请求”名称显示在另一个部分中。
我尝试了以下方法
class TransportationRequest(models.Model):
...
class Meta:
app_label = _('Requests')
db_table = 'backend_transportationrequest'
它是有效的,但现在我对 South 有问题,因为它正在创建迁移来删除所有这些模型。
最佳答案
您当前的问题是您尝试更改 app_label
和 db_table
,这最终会更改模型数据在数据库中的位置。默认情况下,数据库表生成为 [app_label]_[model_name]
(在您的情况下为 backend_transportationrequest
),因此当您修改这两个值时,South 会检测到模型已被删除并再次创建,即使实际情况并非如此。
Django migrations framework 1.7 中引入的应该修复了这个问题,因此它检测到模型已移动(而不是删除和创建)。您可能需要沿着与南边相同的路线伪造一次迁移,这可以通过 modifying the two mgirations it generates 来完成。实际上并不删除和创建表,而是重命名它们。
Django 目前不允许您轻松执行此操作,因为管理站点期望注册的每个应用程序都有一个唯一的 app_label
。您可能有幸玩label
property of your AppConfig ,但这是特别不推荐的,而且历史上已知这会导致严重的头痛。
一种可能是创建先前模型的克隆,并仅使用它向 Django 管理员注册应用程序。您需要创建 a proxy model使用自定义 app_label
和 db_table
。如果这不起作用(尽管应该起作用),另一个选择是将模型克隆为 a unmanaged model使用 app_label
和 db_table
。
关于python - 如何在 django 管理工具的其他部分移动模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27592658/