【发布时间】:2018-03-08 10:20:50
【问题描述】:
我正在尝试基于映射表预取映射表。预取如何将表链接在一起?由于两个表中电路的外键相同,我不确定他们为什么不加入?
circuits = SiteCircuits.objects.all() \
.exclude(circuit__decommissioned=True) \
.select_related('site') \
.select_related('circuit') \
.prefetch_related('circuitnotes_set') \
.prefetch_related('circuit__circuit_type') \
.prefetch_related('circuit__circuitfiles') \
.prefetch_related('circuit__provider') \
.prefetch_related('circuit__service_contacts') \
.prefetch_related('circuit__circuit_type')
模型如下:
class SiteCircuits(models.Model):
site = models.ForeignKey(SiteData, on_delete=models.CASCADE)
circuit = models.ForeignKey(Circuits, on_delete=models.CASCADE)
site_count = models.IntegerField(verbose_name="How many sites circuit is used at?", blank=True, null=True)
active_link = models.BooleanField(default=False, verbose_name="Active Link?")
class Meta:
verbose_name = "Site Circuits"
verbose_name_plural = "Site Circuits"
unique_together = ('site', 'circuit',)
class CircuitNotes(models.Model):
circuit = models.ForeignKey(Circuits, on_delete=models.CASCADE)
notes = models.ForeignKey(Notes, on_delete=models.CASCADE)
class Meta:
verbose_name = "Circuit Notes"
verbose_name_plural = "Circuit Notes "
unique_together = ('circuit', 'notes',)
我也尝试添加一个 QuerySet 过滤器来匹配电路 ID,但变量 circuit_id 不存在,我不确定我是否可以通过这种方式基于对象 ID 进行过滤?
circuits = SiteCircuits.objects.all() \
.exclude(circuit__decommissioned=True) \
.select_related('site') \
.select_related('circuit') \
.prefetch_related(
Prefetch(
'circuitnotes_set',
queryset=CircuitNotes.objects.filter(circuit_id=circuit_id)
)
) \
.prefetch_related('circuit__circuit_type') \
.prefetch_related('circuit__circuitfiles') \
.prefetch_related('circuit__provider') \
.prefetch_related('circuit__service_contacts') \
.prefetch_related('circuit__circuit_type')
【问题讨论】:
标签: django django-models