Django模型中managed=False选项的实用性
在django模型中,我们有一个名为managed的选项,可以设置Django模型中managed=False选项的实用性,django,django-models,Django,Django Models,在django模型中,我们有一个名为managed的选项,可以设置True或False 根据文档,这个选项唯一的区别是表是否由django管理。由django管理还是由我们管理有什么区别 使用一个选项而不是另一个选项有什么优点和缺点吗 我的意思是为什么我们会选择managed=False?它是否会提供一些额外的控制或功能,从而影响我的代码?使用managed=False的主要原因是,如果您的模型是由数据库视图而不是表支持的,那么您不希望Django在运行syncdb时从以下位置发出CREATE
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,
),
]
以上代码只是对迁移文件外观的概述,可以通过上面的链接进行简要说明。