1

我目前正在使用 Django (1.5.1) 开发一个项目,但我遇到了 Django ORM 的一些问题。

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

class Download(models.Model):
    """
    Represents a unit of download with many files
    """
    download_id = models.IntegerField(db_index=True, primary_key=True, null=False)
    name = models.CharField(max_length=1024, null=False)

我必须创建一个页面,其中列出了下载的文件(来自下载模型)以及来自其他表的特定数据。所以我在我的数据库中创建了一个 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”模型中不知道“Do​​wnload”模型(没有引用它),Django ORM 无法建立任何关系。此外,我找不到可以显式创建 JOIN 的方法。谷歌搜索它提供了一些方法,但没有一个有效(所有抛出的异常):

也许我没有很好地实施这些解决方案,或者在我的情况下它们完全没用。我想知道是否有人已经面临这种情况以及如何解决它。

谢谢

4

0 回答 0