一个基本的非托管表

在使用 Django 的某些时候,你可能会发现自己想要与已创建的表或数据库视图进行交互。在这些情况下,你不希望 Django 通过其迁移来管理表。要进行此设置,你只需要为模型的 Meta 类添加一个变量:managed = False

以下是如何创建非托管模型以与数据库视图交互的示例:

class Dummy(models.Model):
    something = models.IntegerField()

    class Meta:
       managed = False

这可以映射到 SQL 中定义的视图,如下所示。

CREATE VIEW myapp_dummy AS 
SELECT id, something FROM complicated_table 
WHERE some_complicated_condition = True

创建此模型后,你可以像使用任何其他模型一样使用它:

>>> Dummy.objects.all()
[<Dummy: Dummy object>, <Dummy: Dummy object>, <Dummy: Dummy object>]
>>> Dummy.objects.filter(something=42)
[<Dummy: Dummy object>]