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

2023-12-22

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

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

我尝试了以下方法

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

它是有效的,但现在我对 South 有问题,因为它正在创建迁移来删除所有这些模型。


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

The Django 迁移框架 https://docs.djangoproject.com/en/stable/topics/migrations/1.7中引入should已修复此问题,因此它检测到模型已移动(而不是删除和创建)。您可能需要沿着与南边相同的路线伪造一次迁移,这可以通过修改它生成的两个 mgirations https://stackoverflow.com/q/1258130/359284实际上并不删除和创建表,而是重命名它们。

Django 目前不允许您轻松执行此操作,因为管理站点期望注册的每个应用程序都有一个唯一的app_label. You may玩得开心label您的 AppConfig 的属性 https://docs.djangoproject.com/en/stable/ref/applications/#django.apps.AppConfig.label,但这是特别不推荐的,而且历史上已知这会导致严重的头痛。

一种可能是创建先前模型的克隆,并仅使用它向 Django 管理员注册应用程序。你需要创建代理模型 https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models与习俗app_label and db_table。如果这不起作用(尽管应该),另一个选择是将模型克隆为非托管模型 https://docs.djangoproject.com/en/dev/ref/models/options/#managed使用app_label and db_table.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐