Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django ORM与SQL视图进行连接_Python_Django_Join_Orm - Fatal编程技术网

Python 使用Django ORM与SQL视图进行连接

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

我目前正在使用Django(1.5.1)进行一个项目,我在使用Django ORM时遇到了一些问题

我实现了如下模型(我只列出了针对我的问题的模型):

我必须创建一个页面,列出下载的文件(来自下载模型)和其他表中的特定数据。 因此,我在数据库中创建了一个SQL视图,然后在Django中将此视图与以下模型一起使用:

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").