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

时间:2011-10-02 09:51:42

标签: django django-models

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

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

使用一个选项而不是其他选项是否有任何优缺点?

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

3 个答案:

答案 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,

),
    ]

以上代码仅用于概述迁移文件的外观,可以通过上面的链接进行简要介绍。