Django做事方式的新手,但我有一系列循环,我相信可以更高效地完成。基本上我有一组相关的对象,我需要向下钻取图形以从结束相关对象中检索值。我正在循环对象以最终获得我想要的值。请参阅以下代码:
for media in campaign.media_set.all():
media_key = media.key
for target in media.target_set.all():
x = target.x
y = target.y
target_id = target.id
for metatag in target.metatag_set.all():
body = metatag.body
hdr = metatag.header
ftr = metatag.footer
ct_url = metatag.clickthrough
point_url = metatag.point.image_file
有关在较少数据库选择中执行此操作的方法的任何指针?
答案 0 :(得分:4)
是的,你正在倒退。这是我在使用Django时多次遇到的问题。使用您要检索的对象启动最简单,并向后工作以满足所有条件。也就是说,您似乎想要了解有关此metatag
的一些信息,请从此开始。
MetaTag.objects.filter(conditions_here)
然后检索其他类似目标x / y的东西,只需使用在related_name
对象上创建的自动MetaTag
属性。没有看到你的模特就很难说出来。
答案 1 :(得分:1)
一般来说,这是一本很好的读物:https://docs.djangoproject.com/en/dev/topics/db/optimization/
可能只是在初始搜索之前添加select_related
可能会有很大帮助。
答案 2 :(得分:0)
如果不看模型定义,这几乎是不可能回答的。如果这些是ForiegnKey关系,那么你很可能完全消除外部循环,只需通过跟随外键生成所有数据(当然使用select_related来获取所有数据)
然而,我们很可能会考虑许多人的关系,因此你不能只是导航备份外键,你可以做的最好的答案。