Django,在转换为lis的QuerySet上使用子查询而不是筛选

2024-10-02 08:14:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个相关的模型:

class Execution(models.Model):
    name = models.CharField("Test Suite Name", max_length=1024)
    <...>

class TestCase(models.Model):
    name = models.CharField("Test Case Name", max_length=1024)
    result = models.CharField("Test Case Result", max_length=32)
    execution = models.ForeignKey(Execution, on_delete=models.CASCADE)
    <...>

我需要比较两次执行,设计一个结果不一致的测试用例列表

我的方法感觉很像python,运行速度也相当快,但我非常确定,使用Django子查询(或者可能是Exists()?)可以改进这一点

以下是我的代码:

execution1 = Execution.objects.get(id=id1)  # Executions retrieval (irrelevant to the question)
execution2 = Execution.objects.get(id=id2)

execution1_testcases = execution1.testcase_set.all()
execution1_testcases_names = [testcase.name for testcase in execution1_testcases]

for testcase2 in execution2.testcase_set.order_by('-result', 'name'):
    if testcase2.name in execution1_testcases_names:
        # TODO: this most likely can be improved with Subqueries
        result1 = list(filter(lambda testcase1: testcase1.name == testcase2.name, execution1_testcases))[0].result
    else:
        result1 = None

    if result1 != testcase2.result:
        <...>  # discrepancy processing

Tags: nameintestmodelsresultlengthtestcasemax

热门问题