有没有人知道是否可以从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外推,也不需要神奇的属性。
这并不“感觉”正确。我想可能有更好的方法来提取外键,所以如果有人知道一个更好/更清洁的方法来做到这一点,我全都耳朵;否则我只是想保持这样,因为。 。 。好 。 。 。它有效!
感谢。
答案 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)