Sql 基于连接查询创建Django模型

Sql 基于连接查询创建Django模型,sql,django,model,django-queryset,Sql,Django,Model,Django Queryset,我对这个主题的搜索导致了关于使用sql处理模型中的数据的答案,但我想做的是有效地创建一些行为类似于django其余部分的模型,但基于包括连接的自定义查询的东西 在Microsoft Access中,表单和报表可以像在表上一样轻松地基于查询集,并且至少在某些时候这些记录集是可更新的 我希望能够使用django的所有功能,但是底层模型能够基于查询。那能做到吗 如果将模型声明为不受django管理,则可以执行此操作。但是您必须自己为表/视图创建SQL代码 class SQLView(models.Mo

我对这个主题的搜索导致了关于使用sql处理模型中的数据的答案,但我想做的是有效地创建一些行为类似于django其余部分的模型,但基于包括连接的自定义查询的东西

在Microsoft Access中,表单和报表可以像在表上一样轻松地基于查询集,并且至少在某些时候这些记录集是可更新的


我希望能够使用django的所有功能,但是底层模型能够基于查询。那能做到吗

如果将模型声明为不受django管理,则可以执行此操作。但是您必须自己为表/视图创建SQL代码

class SQLView(models.Model):

    # your field definitions

    class Meta:
        managed = False
        db_table = 'your_view_name'

使用postgresql作为数据库,您可以创建截取操作的视图、规则或触发器。

创建一个可以从数据库视图读取的模型很容易——如果这能满足您的需要,我可以向您展示如何做到这一点。创建可以写入数据库视图的模型需要您的数据库后端接受对视图的写入,我不知道有任何数据库后端支持这一点。我想可能有一个我不知道的。如果必要,我可以编写代码来进行更新、删除或插入。我使用的是postgresql,因此我认为我可以在视图上创建触发器函数,该函数将在尝试更新需要修改的视图列时激活。我从未尝试过,但我认为这是可能的。但是,这会将实现隐藏在数据库中,可能是在python中,而不是在django中,因为它应该在模型中。py如果我要将代码放入模型中,那么我想我需要:1)一个每次django执行SELECT查询时都会运行的函数。2) 使我的特殊模型字段在使用时返回列值的方法。3) 一种截取并实现对单个值的更新的方法,或者截取将写入数据库的任何操作的某些总体截取。我还需要为我没有在fieldsDjango上实现的操作模拟正确的异常。Jango使用其数据库后端包将模型更新转换为SQL,因此从概念上讲,将模型更改的自定义转换为SQL的正确位置应该是编写自己的数据库后端。这比我以前的水平要低一点,因此,我不确定是否有任何快捷方式可以使其保持合理。如果我设置managed=False,这不意味着我禁止隐式数据库操作,而必须自己启动它们吗?如何拦截更改字段或插入或删除记录的尝试?我使用的是postgresql,但我更愿意将实现放在模型中,而不是数据库中。