【问题标题】:Inherit and rename the table from default setting从默认设置继承并重命名表
【发布时间】:2020-05-31 13:01:00
【问题描述】:

我想重命名来自 Django 的默认表。 Meta 确实复制了表格,但列完全不同 我该如何克服它?

【问题讨论】:

  • 它不复制表:它只是通过创建一个指向 parent 表的指针来执行继承。

标签: django database django-models django-authentication


【解决方案1】:

发生这种情况的原因是Session 是一个具体的模型。这里发生的是您指定要继承 Session 表。这是在 SQL 层中通过创建一个新表来实现的,该表除了额外的字段外,还包含父表的 OneToOneField,此外它还充当主键。有关 Django 如何处理模型继承的更多信息,请参阅Multi-table inheritance in the documentation 部分。

如果你想实现你自己的会话模型,你应该继承AbstractBaseSession model [Django-doc]。这是一个抽象模型,具有sesion_keysession_dataexpire_date 作为字段。然后,您可以覆盖或“猴子补丁”get_model_classSessionStore

【讨论】:

  • 其实我想重命名所有的默认表。所以我该怎么做?原版的应用太好了,等名字都调整好了,我想用~
  • @WKenny:通常你不能只是“猴子补丁”数据库名称。因此,除非您修补本地 Django 安装的源代码,否则这是不可能的,或者至少不是没有很多“技巧”,这可能会破坏一些逻辑。为什么您需要重命名数据库表?
  • @WKenny:好吧,我尝试编辑env/lib/python3.6/site-packages/django/contrib/sessions/models.py,然后运行makemigrations,它写了一个迁移“Rename table for session to django_blabla”,如果稍后迁移,那么该表被重命名.
  • @WKenny:你在你使用的虚拟环境中编辑了那个?我已经在 Django-3.0 和 Django-2.2 上对此进行了测试,它们都可以工作。
  • Willem 非常感谢您!我发现我无法进行迁移的原因是由于虚拟环境。一旦我在 cmd 中启动激活并尝试 makemigrations 它就像一个魅力!所有默认表都被重命名,但也具有默认功能,如 Admin Auth 等。
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2014-01-03
  • 2021-06-05
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多