问题 Django:如何通过Template通过ForeignKey连接数据?


几个星期后,我正在学习Python和Django。到目前为止,已经足够阅读其他用户的问题和答案。但现在我的第一个问题的时刻已经到来。

我会尽力描述我的问题。我的问题是我无法查询或获取我想要的数据。

我想得到一个类Image的第一个对象的url,它由ForeignKey关联到一个Gallery,它由ForeignKey关联到类Entry。

这里到目前为止models.py:

class BlogEntry(models.Model):
   ...
   title = models.CharField(max_length=100)
   ...

class Gallery(models.Model):
   entry = models.ForeignKey('BlogEntry')

class Image(models.Model):
  gallery = models.ForeignKey('Gallery')
  picture = models.ImageField(upload_to='img')

风景:

def view(request):
  return render_to_response('mainview.html', {
    'entryquery': BlogEntry.objects.all(),
    }
)

模板:

{% for item in entryquery %}
  <h1>{{ item.title }}</h1>
  <img src="{{ item.WHAT TO ENTER HERE? :) }}" />
{% endfor %}

很明显我想要什么? 有人可以帮助我,并在可能的时候写一个简短的解释吗?

问候 巴斯蒂安


4396
2018-06-15 19:15


起源



答案:


您可以 访问相关成员 就像 模板中的其他属性,所以你可以这样做: item.gallery_set.all.0.image_set.all.0.picture.img。但是,在BlogEntry上定义一个查找并返回相应图片的方法可能更容易,这样你就可以做到 item.first_image 或类似的东西


14
2018-06-15 19:25



非常感谢您的快速回答:)。我完全不明白这行代码。你能给我一个关于访问相关成员的文档的链接吗?我没有在Django文档页面上找到任何东西。 - user1459531
是的,添加了一个链接。希望有所帮助! - cberner
谢谢你,谢谢你,谢谢你! :) - user1459531


答案:


您可以 访问相关成员 就像 模板中的其他属性,所以你可以这样做: item.gallery_set.all.0.image_set.all.0.picture.img。但是,在BlogEntry上定义一个查找并返回相应图片的方法可能更容易,这样你就可以做到 item.first_image 或类似的东西


14
2018-06-15 19:25



非常感谢您的快速回答:)。我完全不明白这行代码。你能给我一个关于访问相关成员的文档的链接吗?我没有在Django文档页面上找到任何东西。 - user1459531
是的,添加了一个链接。希望有所帮助! - cberner
谢谢你,谢谢你,谢谢你! :) - user1459531


class BlogEntry(models.Model):
    ...
    title = models.CharField(max_length=100)
    ...

class Gallery(models.Model):
    entry = models.ForeignKey('BlogEntry',related_name="galleries")

class Image(models.Model):
    gallery = models.ForeignKey('Gallery',related_name='images')
    picture = models.ImageField(upload_to='img')

你必须添加 related_name 在库模型和模板视图中的外键中:

{% for g in blogentry.galleries.all %}
    {{g.name}}
        {%for i in g.images.all %}
            <img src="{{i.picture.url}}">{{i.picture}}</img>
        {% endfor %}
{% endfor %}

0
2018-05-06 12:34