在django模型中,我们有名为托管的选项,可以设置为True或False
根据文档,该选项的唯一区别是表是否将由django管理。 django或我们的管理有什么不同吗?
使用一个选项而不是其他选项是否有任何优缺点?
我的意思是为什么我们选择托管=假。它会给出一些影响我代码的额外控制或权力吗?
答案 0 :(得分:8)
使用managed=False
的主要原因是你的模型是由数据库视图而不是表格支持的 - 所以你不希望Django在你运行时发出CREATE TABLE
命令{ {1}}。
答案 1 :(得分:3)
从Django docs开始:
如果模型表示现有表或通过其他方式创建的数据库视图,则完全相同
managed=False
非常有用。这是managed=False
时唯一的区别。模型处理的所有其他方面与正常
答案 2 :(得分:0)
每当我们创建Django模型时, managed = True 隐式为 默认为true。众所周知,当我们运行python manage.py时 makemigrations迁移文件(可以说是数据库视图)是 在应用的迁移文件夹中创建并应用该迁移,即 在db中创建表,或者我们可以说模式。
因此,通过 managed = False ,我们限制Django创建表(方案,更新 该模型或其表中指定的字段) 迁移文件。
为什么要使用它?案例1:有时我们在项目中使用两个数据库 例如,我们有db1(默认)和db2,因此我们不想特别 在db1中创建模式或表的模型,所以我们可以这样做 自定义数据库视图。
案例2。在django ORM中,db表绑定到django ORM模型,它 帮助绑定数据库视图以与django ORM模型绑定。
也可以通过以下链接: https://blog.rescale.com/using-database-views-in-django-orm/
我们可以在迁移文件中为数据库视图添加原始sql。
迁移中的原始sql看起来像:在0001_initial.py
from __future__ import 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,
),
]
以上代码仅用于概述迁移文件的外观,可以通过上面的链接进行简要介绍。