访问到许多在Django
问题描述:
一对多的关系我已经建立了几个模型如下:访问到许多在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内的一些文本块,它出来确定的,但不是在循环中。
任何建议让它的工作/一般整理这将不胜感激。
谢谢。
答
如果Gallery-Image
关系是多对多我猜你有你的Gallery
模型,其中M2M管理器是场本身的m2m
场。经理可以像其他任何QuerySet
:model_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 %}
答
您的问题可能在于您从页面访问图库的方式。在您的模板,你可以试试下面,看看你得到任何输出:
{{ page.gallery }}
在有些情况下某些错误可以在模板中被忽略的情况。
此外,我有点好奇你的页面和图库是如何相关的? Page模型是否有一个名为“gallery”的OneToOneField? Gallery是否有页面的外键?在后一种情况下,你会获得通过与页面相关的画廊:
{{ page.gallery_set.all }}
它会更容易,如果你提供的关于您的模型领域的一些额外的信息来回答这个问题。