具有外键模型的Django高效查询集

时间:2019-01-19 17:48:54

标签: python django django-queryset

我正在尝试为以下模型结构找到最有效的方法(尽可能少的数据库查询)。

然后我想在模板中传递所有3个模型的所有数据,因为我将不得不显示帖子数据以及遍历注释以创建注释列表并显示不同注释的所有附件。 / p>

#include <Python.h>

static PyObject* helloworld(PyObject* self, PyObject* args) {
  return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
  "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
   {"helloworld", (PyCFunction)helloworld, 
      METH_NOARGS, helloworld_docs},
      {NULL}
};

void inithelloworld(void) {
   Py_InitModule3("helloworld", helloworld_funcs,
              "Extension module example!");
}

我应该从class Post(BaseModel): user = models.ForeignKey('User', blank=True, null=True, title = models.CharField(max_length=128) content = models.TextField() class Comment(BaseModel): post = models.ForeignKey('Post', on_delete=models.CASCADE) user = models.ForeignKey('User', on_delete=models.SET_NULL) text = models.TextField() class CommentAttachment(BaseModel): comment = models.ForeignKey('Comment', on_delete=models.CASCADE) name = models.CharField(max_length=128) 方向获取所有数据(意味着获取所有CommentAttachment,其中CommentAttachments是发布ID,然后使用comment__post__id获取所有其他数据)还是在那里从select_related模型开始的另一种方式?

1 个答案:

答案 0 :(得分:0)

您可以在查询中使用prefetch_relatedselect_related

posts = Post.objects.filter(user=some_user).prefetch_related(
    'comment_set', 'comment_set__commentattachment_set'
)

例如,在进行上述查询后,以下命令可能会在不进行SQL查询的情况下检索queryset中第一篇文章的所有注释:

posts.first().comment_set.all()