django orm - 如何连接多个表

问题描述 投票:0回答:1

我在 postgresql 中有一堆表:

create TABLE run (
    id integer NOT NULL,
    build_id integer NOT NULL,
);

CREATE TABLE test_info (
    suite_id integer NOT NULL,
    run_id integer NOT NULL,
    test_id integer NOT NULL,
    id integer NOT NULL,
    error_text text
);

CREATE TABLE tool_info (
    id integer NOT NULL,
    tool_id integer,
    revision_id integer,
    test_info_id integer,
);

CREATE TABLE suite_info (
    id integer,
    suite_id integer NOT NULL,
    run_id integer NOT NULL,

);
CREATE TABLE test (
    id integer NOT NULL,
    path text NOT NULL
);

我想使用 django ORM 编写以下查询。我用的是2.2.

select test.path, tool_info.id, run.id, test_info.id, suite_info.id from run join test_info on run.id = test_info.run_id join suite_info on run.id = suite_info.run_id join tool_info on tool_info.test_info_id=test_info.id join test on test_info.test_id=test.id where run.id=34;

我试过这个:

x= Run.objects.filter(suiteinfo__run_id=34)
(Pdb) str(x.query)
'SELECT "run"."id", "run"."build_id", "run"."date", "run"."type_id", "run"."date_finished", "run"."ko_type", "run"."branch_id", "run"."arch_id" FROM "run" INNER JOIN "suite_info" ON ("run"."id" = "suite_info"."run_id") WHERE "suite_info"."run_id" = 34'

我可以看到它正在执行连接,但数据没有出现在选择中。我尝试过 selected_related 等。

RUN 表是将数据联系在一起的中心表。如何使用 ORM 创建该查询?

django django-views
1个回答
0
投票

要使用 ORM 连接表,您可以使用 select_lated()prefetch_lated()。 查看这些主题以确定哪个主题适合您。

希望这些信息对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.