查询Django中的多个表并获得合并结果 [英] Query Multiple Tables in Django and geta consolidated result
本文介绍了查询Django中的多个表并获得合并结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在用Django构建一个博客应用程序,目前只专注于查询数据。我正在创建帖子,然后将多个图像上载到该帖子。
这是我的博客帖子模型。
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
title = models.CharField(max_length=255)
description = models.CharField(max_length=1000,null=True)
Tags = models.CharField(max_length = 255,null=True,blank=True)
Created_date = models.DateTimeField(auto_now_add=True)
Updated_date = models.DateTimeField(auto_now=True)
category = models.ForeignKey(Category, on_delete=models.PROTECT)
这是我的图像模型
class Images(models.Model):
Post = models.ForeignKey(Post,on_delete=models.CASCADE)
image = models.ImageField(upload_to='media/')
现在使用这个实现,我在数据库中有两个表,数据按预期存储在其中。
在第一个表中,存储了与Post相关的所有详细信息,在第二个表ID中,存储了Post_ID、Image_URL。如果我上载3张图像,则将创建3行。
现在我要查询的数据是-&>我想要所有帖子,我想要根据帖子的所有图像。
我可以获得针对Post和Images的单独查询,但如何在Django ORM中做到这一点? 如何查询数据?
推荐答案
假设您有一个用Post.objects.all()
这样的查询集填充名为posts
的上下文变量的视图,您的模板可能如下所示简化
{% for post in posts %}
{{ post.title }}
{{ post.category }}
{{ post.description }}
...
{% for image in post.images_set.all %}
{{ image.image.url }}
{% endfor %}
{% endfor %}
每次迭代post.images_set.all
将执行另一个查询时,应使用prefetch_related
,这样就不会每次都执行查询并缓存数据
posts = Post.objects.prefetch_related('images_set')
这篇关于查询Django中的多个表并获得合并结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文