高效的Django查询

时间:2011-06-21 01:22:54

标签: python sql django django-models

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

有关在较少数据库选择中执行此操作的方法的任何指针?

3 个答案:

答案 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来获取所有数据)

然而,我们很可能会考虑许多人的关系,因此你不能只是导航备份外键,你可以做的最好的答案。