2011-05-13 84 views
2

一对多的关系我已经建立了几个模型如下:访问到许多在Django

画廊

图片

画廊和图像共享一个多对多的关系。

页面可以有1或0个画廊。

我创建了一个带有几张图片的图库,并将其附加到一个页面对象。

但是,我无法在模板中显示它。

任何人都可以帮忙吗?

我的页面视图看起来是这样的:

def detail(request, page_id): 
p = get_object_or_404(Page, pk=page_id) 
return render_to_response('page/detail.html', {'page': p}, 
         context_instance=RequestContext(request)) 

而且模板:

{% block images %} 
{% if page.gallery %} 
{% for image in page.gallery.image_set.all %} 
<a rel="gallery" href="{{ STATIC_URL }}{{ image.image }}"></a> 
{% endfor %} 
{% endif %} 
{% endblock %}` 

如果我尝试输出IF内的一些文本块,它出来确定的,但不是在循环中。

任何建议让它的工作/一般整理这将不胜感激。

谢谢。

回答

4

如果Gallery-Image关系是多对多我猜你有你的Gallery模型,其中M2M管理器是场本身的m2m场。经理可以像其他任何QuerySetmodel_instance.mym2mfield.filter()查询。

如果您ManyToManyField被呼吁Gallery模型images,你的模板应该是这样的:

{% for image in page.gallery.images.all %} 
    <a rel="gallery" href="{{ STATIC_URL }}{{ image.image }}"></a> 
{% endfor %} 

如果您ManyToManyField是您Image模型,默认的名称将是象你所说的,除非您指定一个related_name在这种情况下,你会使用该名称。

{% for image in page.gallery.image_set.all %} 
1

您的问题可能在于您从页面访问图库的方式。在您的模板,你可以试试下面,看看你得到任何输出:

{{ page.gallery }} 

在有些情况下某些错误可以在模板中被忽略的情况。

此外,我有点好奇你的页面和图库是如何相关的? Page模型是否有一个名为“gallery”的OneToOneField? Gallery是否有页面的外键?在后一种情况下,你会获得通过与页面相关的画廊:

{{ page.gallery_set.all }} 

它会更容易,如果你提供的关于您的模型领域的一些额外的信息来回答这个问题。