在 Django 中查询多个表并获得合并结果

Query Multiple Tables in Django and geta consolidated result

我正在用 Django 构建一个博客应用程序,目前停留在查询数据上。我正在创建一个 Post,然后将多张图片上传到 post。

这是我的博客Post模特。

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/')

现在使用此实现,我在数据库中有 2 个表,其中按预期存储数据。 在第一个表中,所有与 Post 相关的详细信息都被存储,在第二个 Table ID 中,Post_Id、Image_URL 被存储。如果我上传 3 张图片,则会创建三行。

现在我想查询数据 -> 我想要所有 posts 并且我想要根据 Posts 的所有图像。

我可以获得 Post 和图像的单独查询,但是如何在 Django ORM 中完成此操作? 如何查询数据?

你可以这样使用;

post = Post.objects.all().prefetch_related('images_set').get(pk=1)
images = post.images_set.all() # this will bring you all images related to 
                                post

假设您有一个视图,该视图使用 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')