查询Django中的多个表并获得合并结果 [英] Query Multiple Tables in Django and geta consolidated result

查看:0
本文介绍了查询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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆