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

时间:2012-06-15 19:15:02

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

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

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

我想获取由ForeignKey关联到Gallery的第一个对象的url到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 %}

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

问候 巴斯蒂安

2 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:0)

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 %}