Django查询 - 是否基于查询数据预取筛选?

2024-09-28 21:55:37 发布

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

我正在根据父查询对象筛选预取,这可能吗?希望下面的例子能解释。在

SiteData中的live link类型和Circuits中的circuit type使用相同的子模型。在

例如,如果live link type是'Fibre',我只想预取circuit_type为'Fibre'的电路。每个站点可以有许多电路,但我现在只想要一个活的

以下是查询:

conn_stats = SiteData.objects.all()
    .exclude(site_type__site_type='Factory') \
    .exclude(site_type__site_type='Data Centre') \
    .Prefetch(
        'circuits_set',
        queryset=Circuits.objects.filter(SiteData.objects.live_link_type.circuit_type)
        )
)

以下是模型:

^{pr2}$

Tags: 对象模型live类型objectstypelinksite
1条回答
网友
1楼 · 发布于 2024-09-28 21:55:37

据我所知,你不能用一个查询集完成你所要求的。在

如果CircuitTypes的数目很小,可以考虑为每种类型的电路构造一个查询集:

circuit_types = CircuitType.object.all()
for circuit_type in circuit_types:
    prefetch = Prefetch('circuits_set',
                        queryset=Circuits.objects.filter(
                            circuit_type=circuit_type)
    conn_stats = SiteData.objects.filter(live_link_type=circuit_type) \
        .exclude(site_type__site_type='Factory') \
        .exclude(site_type__site_type='Data Centre') \
        .prefetch_related(prefetch)

如果有许多电路类型并且这是禁止的,那么您可以向Circuits添加一个布尔active字段,并在更改每个SiteData.live_link_type时更新其值。这样您就只能直接查询活动的Circuits

^{pr2}$

相关问题 更多 >