在 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')
我正在用 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')