从django中的查询集中仅提取或返回外键的模型实例或一对一字段

时间:2011-09-13 21:12:27

标签: django django-queryset

有没有人知道是否可以从Django中的查询集中仅提取外键的模型实例或一对一字段?

假设我说我有两个类,一个Post和一个MagicalPost,由OneToOne Field链接如下:

class Post(models.Model):
    ...


class MagicalPost(models.Model):
    post = models.OneToOneField('Post')
    pony = models.TextField(max_length=100, help_text='This is where the MAGIC happens!')

我想对所有神奇的帖子运行查询,但我只想收到帖子对象。现在我循环查询集以提取帖子:

magical_posts = MagicalPost.objects.all()
posts = []

for magical_post in magical_posts:
    posts.append(magical_post.post)

return posts

接下来,帖子由对一般Post对象进行操作的函数处理,因此我不想处理magical_post.post外推,也不需要神奇的属性。

这并不“感觉”正确。我想可能有更好的方法来提取外键,所以如果有人知道一个更好/更清洁的方法来做到这一点,我全都耳朵;否则我只是想保持这样,因为。 。 。好 。 。 。它有效!

感谢。

1 个答案:

答案 0 :(得分:1)

例如,您可以轻松使用select_related。它只有一个db查询。

magical_posts = MagicalPost.objects.select_related()
# same code

或者像这样使用2个查询:

posts_ids = MagicalPost.objects.values_list('post', flat=True)
posts = Post.objects.filter(id__in=posts_ids)