【问题标题】:Django: How to get data connected by ForeignKey via Template?Django:如何通过模板获取外键连接的数据?
【发布时间】:2012-06-18 21:18:32
【问题描述】:

几周以来,我一直在学习 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 %}

很清楚我想要什么? 有人可以帮我写一个简短的解释吗?

问候 巴斯蒂安

【问题讨论】:

    标签: django templates foreign-keys django-related-manager


    【解决方案1】:

    您可以像other attributes in a template 一样使用access related members,因此您可以执行以下操作:item.gallery_set.all.0.image_set.all.0.picture.img。但是,在 BlogEntry 上定义一个查找并返回适当图片的方法可能更容易,这样您就可以执行 item.first_image 或类似的操作

    【讨论】:

    • 非常感谢您的快速回答:)。我不完全理解这行代码。你能给我一个链接到相关成员的访问文件吗?我在 Django 文档页面上没有找到任何东西。
    • 是的,添加了一个链接。希望有帮助!
    • 谢谢,谢谢,谢谢! :)
    【解决方案2】:
    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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 2021-05-20
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2016-04-17
      相关资源
      最近更新 更多