Django模型中managed=False选项的实用性

Django模型中managed=False选项的实用性,django,django-models,Django,Django Models,在django模型中,我们有一个名为managed的选项,可以设置True或False 根据文档,这个选项唯一的区别是表是否由django管理。由django管理还是由我们管理有什么区别 使用一个选项而不是另一个选项有什么优点和缺点吗 我的意思是为什么我们会选择managed=False?它是否会提供一些额外的控制或功能,从而影响我的代码?使用managed=False的主要原因是,如果您的模型是由数据库视图而不是表支持的,那么您不希望Django在运行syncdb时从以下位置发出CREATE

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

根据文档,这个选项唯一的区别是表是否由django管理。由django管理还是由我们管理有什么区别

使用一个选项而不是另一个选项有什么优点和缺点吗


我的意思是为什么我们会选择
managed=False
?它是否会提供一些额外的控制或功能,从而影响我的代码?

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

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


当我们创建django模型时,managed=True隐式 默认情况下为true。正如我们所知,当我们运行
python manage.py makemigrations
时,迁移文件(我们可以说是db视图)是 在应用程序的迁移文件夹中创建并应用该迁移,即 在db中创建表,也可以说是schema

所以通过managed=False,我们限制Django创建表(scheme,update) 该模型的表的架构)或中指定的字段 迁移文件

我们为什么使用它

案例1:有时我们在项目中使用两个db 例如,我们有db1(默认值)和db2,所以我们不需要特定的 要创建的模型在db1中创建模式或表,以便 自定义数据库视图

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

也可以通过以下途径:

我们可以在迁移文件中添加原始sql for db视图

迁移中的原始sql看起来像:in 0001_initial.py

从未来导入unicode文本

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,

),
    ]
以上代码只是对迁移文件外观的概述,可以通过上面的链接进行简要说明。