【发布时间】:2021-06-04 19:02:55
【问题描述】:
我的 Django 应用('crisismode')有两个模型:事件和动作
我想显示与这些事件相关的事件和操作。对于每个事件,我只想显示活动的动作,所以我使用了一个方法(activactions)。
如何预取这些动作?
class Event(models.Model):
description = models.CharField(max_length=1000, blank=True)
active = models.BooleanField(default=True)
def activeactions(self):
actions = Action.objects.filter(event=self, active=True)
if actions:
return Action.objects.filter(event=self, active=True)
else:
return None
class Action(models.Model):
description = models.CharField(max_length=1000)
active = models.BooleanField(default=True)
event = models.ForeignKey(Event, on_delete=models.SET_NULL, related_name="actionsforevent", null=True, blank=True)
我执行以下查询:
events = Event.objects.filter(crisis=crisis, active=True).prefetch_related('actionsforevent')
但是 django-debug-toolbar 告诉我有多个查询:
FROM "crisismode_action"
WHERE ("crisismode_action"."active" = true AND "crisismode_action"."event_id" = 323)
ORDER BY "crisismode_action"."order" ASC, "crisismode_action"."id"
ASC 10 similar queries. Duplicated 2 times.
【问题讨论】:
-
你到底想做什么?仅预取
active字段为True的那些操作? (预取相关也会进行多次查询) -
是的,只有那些活动字段为 True 的操作。
标签: django foreign-keys django-queryset