Django模型中managed = False选项的效用

cod*_*ool 1 django django-models

在django模型中,我们有一个名为managed的选项,可以设置为True或False

根据文档,该选项的唯一区别是表是否将由django管理.django或我们的管理有什么不同吗?

使用一个选项而不是其他选项有什么优缺点吗?

我的意思是为什么我们选择managed = False.它会给出一些影响我代码的额外控制或权力吗?

Vin*_*mar 11

当我们创建 django 模型时,Managed=True默认情况下隐式为 true 。我们知道,当我们运行python manage.py makemigrations迁移文件(我们可以说是数据库视图)时,会在应用程序的迁移文件夹中创建并应用该迁移,即在数据库中创建表,或者我们可以说模式。

因此,通过Managed=False,我们限制 Django 创建该模型的表(方案,更新表的架构)或其在迁移文件中指定的字段。

我们为什么使用它?

case1:有时我们在项目中使用两个数据库,例如我们有 db1(默认)和 db2,因此我们不希望特定模型在 db1 中创建架构或表,因此我们可以这样做,或者我们可以自定义数据库视图。

案例2。在 django ORM 中,db 表与 django ORM 模型绑定,它有助于将数据库视图与 django ORM 模型绑定。

也可以通过链接

我们可以在迁移文件中添加数据库视图的原始 sql。

迁移中的原始sql如下所示:在0001_initial.py中

未来导入 unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.RunSQL(
CREATE OR REPLACE VIEW app_test AS 
    SELECT row_number() OVER () as id,
        ci.user_id,
        ci.company_id,

),
    ]
Run Code Online (Sandbox Code Playgroud)

上面的代码只是为了概述迁移文件的外观,可以通过上面的链接进行简要介绍。


Dan*_*man 9

使用的主要原因managed=False是,如果您的模型由数据库视图而不是表格支持,那么您不希望Django CREATE TABLE在运行时发出命令syncdb.


Pav*_*eev 5

直接来自Django docs

managed=False如果模型表示通过其他某种方式创建的现有表或数据库视图,则此功能很有用。这是时的唯一区别managed=False。模型处理的所有其他方面与正常情况完全相同

  • 是的,我明白了。我必须设置 Managed=True ,然后伪造初始迁移,这样就不会创建表。现在仅创建新表或字段。 (2认同)