Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
django jeft联接查询_Django_Sqlite_Python 3.x_Django Models - Fatal编程技术网

django jeft联接查询

django jeft联接查询,django,sqlite,python-3.x,django-models,Django,Sqlite,Python 3.x,Django Models,我有以下型号: class TestCaseStatus(models.Model): name = models.CharField(default='n/a', max_length=50) def __str__(self): return self.name class TestCase(models.Model): id = models.CharField(unique=True, max_length=100, primary_key=T

我有以下型号:

class TestCaseStatus(models.Model):
    name = models.CharField(default='n/a', max_length=50)
    def __str__(self):
        return self.name


class TestCase(models.Model):
    id = models.CharField(unique=True, max_length=100, primary_key=True)
    name = models.CharField(default='n/a', max_length=200)

    def __str__(self):
        return self.name


class TestRun(models.Model):
    test_id = models.ForeignKey(TestCase)
    run_id = models.CharField(max_length=100, default='0')
    datetime = models.DateTimeField()
    status = models.ForeignKey(TestCaseStatus)
    messages = models.CharField(default='n/a', max_length=500)

    def __str__(self):
        return self.run_id, self.test_id, self.status
我想执行以下SQL查询:

select a.test_id_id, a.status_id, b.status_id 
from runscompare_testrun  as a
left join runscompare_testrun as b  on a.test_id_id = b.test_id_id 
where  a.run_id = 1 and b.run_id=2
SQL输出:


我假设有一种django方法可以避免使用raw()调用,但我似乎找不到它

如果我正确理解了您的查询,您需要运行
时的所有详细信息,以及运行
测试用例时的附加详细信息,但是
run\u id=“2”

有了这个假设,你可以做这样的事情:

# Start with run_id=1
a = TestRun.objects.filter(run_id="1").select_related(
        'test_id', 'status').prefetch_related(
        'test_id__testrun_set', 'test_id__testrun_set__status')

# For each, get related
for i in a:
    b = i.test_id.testrun_set.filter(run_id="2")
    print(i.test_id, i.status, [j.status for j in b])
这不是一个单一的数据库查询,因为()和()都将进行数据库调用,但它将减少调用的次数