通过外键进行Django过滤查询

时间:2019-02-27 11:31:59

标签: django django-models django-views

我正在努力为我的项目获取正确的查询。这是一个示例或我的模型:

from django.db import models

class Pictures(models.Model):
    name = models.CharField(max_length=100)
    bild = models.FileField(upload_to='article_pictures/')
    articel = models.ForeignKey('articles', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Articles(models.Model):
    name = models.CharField(max_length=100)
    text = models.TextField(max_length=2000)
    published = models.BooleanField(default=False)

    def __str__(self):
        return self.name

我如何从手工艺品课中获取已发布的手工艺品,包括图片(如果有一个或多个)?

谢谢您的帮助

3 个答案:

答案 0 :(得分:1)

我认为对此没有任何确切的查询,但是您可以使用prefetch_related从数据库中预加载数据。例如:

articles = Artikles.objects.filter(published=True).prefetch_related('pictures_set')

for article in articles:
     article.pictures_set.all()  # will not hit database

答案 1 :(得分:1)

所有已发表的文章

Articles.objects.filter(published=True)

一篇发表的文章(示例):

article = Articles.objects.filter(published=True).first()
# and it's pictures
for picture in article.pictures_set.all():
    print(picture)

答案 2 :(得分:0)

  

注意:模型具有单数名称,因此您应将Articles重命名为Article,将Pictures重命名为{{1} }。

文章Picture的相关Picture可以通过以下方式获得:

article

这是一个包含所有相关图片的查询集。

我们可以获取已发布的my_article.picture_set.all(),然后通过以下两个额外的查询来获取相关的Article

Picture

因此,在模板中,您可以像这样渲染它:

articles = Article.objects.filter(published=True).prefetch_related('picture_set')
相关问题