Python 使用Django ORM与SQL视图进行连接
我目前正在使用Django(1.5.1)进行一个项目,我在使用Django ORM时遇到了一些问题 我实现了如下模型(我只列出了针对我的问题的模型): 我必须创建一个页面,列出下载的文件(来自下载模型)和其他表中的特定数据。 因此,我在数据库中创建了一个SQL视图,然后在Django中将此视图与以下模型一起使用:Python 使用Django ORM与SQL视图进行连接,python,django,join,orm,Python,Django,Join,Orm,我目前正在使用Django(1.5.1)进行一个项目,我在使用Django ORM时遇到了一些问题 我实现了如下模型(我只列出了针对我的问题的模型): 我必须创建一个页面,列出下载的文件(来自下载模型)和其他表中的特定数据。 因此,我在数据库中创建了一个SQL视图,然后在Django中将此视图与以下模型一起使用: class DownloadedFiles(models.Model): id = models.IntegerField(null=False, primary_key=Tr
class DownloadedFiles(models.Model):
id = models.IntegerField(null=False, primary_key=True)
file_name = models.CharField(max_length=1024)
added_date = models.DateTimeField()
class Meta:
managed = False
db_table = "file_list"
我用以下方式来称呼它:
data = DownloadedFiles.objects.all()
我对视图没有任何问题,它返回我需要的结果,所以这很好
但是现在我想使用视图以外的其他表中的字段来过滤结果。
例如,我想使用“下载”模型中的“文件名”字段过滤结果。
在SQL中,这类似于:
SELECT * FROM file_list
INNER JOIN download ON download.id=file_list.id
WHERE download.file_name LIKE '%something%';
我想使用ORM函数,比如
DownloadedFiles.objects.filter(download__file_name__contains="something").
不幸的是,由于我的“DownloadedFiles”模型中不知道“Download”模型(没有对它的引用),Django ORM无法建立任何关系。
此外,我找不到一个可以显式创建连接的方法。
谷歌搜索它提供了一些方法,但没有一个有效(所有抛出的异常):
- 使用extra():
FieldError:无法将关键字“下载”解析到字段中。选项包括:文件名、添加日期、id
- 正在使用join():
数据库错误:column download.id不存在
- 向视图的模型中添加一些外键,以便与其他表建立关系:与extra()相同
谢谢你你建议的语法
过滤器(mission\uu place\u name\uu contains=“something”)
应该可以正常工作。当您尝试这样做时会发生什么?我简化了我的示例,也澄清了我的问题:事实上,由于DownloadedFiles模型没有对Download模型的引用,Django ORM似乎无法解析Download\u file\u name\u包含的。抛出的错误与我尝试extra()时相同:FieldError:无法将关键字“download”解析到字段中。选项包括:文件名、添加日期、id
您可能过于简化了:现在下载文件和下载文件之间根本没有匹配字段。这是什么关系?事实上,在这种特殊情况下,只有id是常见的。但是我应该能够在视图和我创建的任何其他模型之间进行连接,从视图开始。目标是保持视图以获取所有结果,然后使用连接和其他表上的where子句过滤这些结果。
DownloadedFiles.objects.filter(download__file_name__contains="something").