我在Windows 8机器上使用Django 1.8和Postgres 9.2。
我有两个几乎相同的代码来自我的两个项目。一个有效,另一个没有。
以下是有效的代码:
# views.py
from django.shortcuts import render
from models import Artist, Track
def music(request):
artists = Artist.objects.all().order_by('orderName')
artistTrackCollections = []
for artist in artists:
artist.tracks = Track.objects.filter(artist=artist).order_by('order')
artistTrackCollections.append(artist)
return render(request, 'music.html', {'artistTrackCollections': artistTrackCollections,})
相关的模板代码:
{% for artist in artistTrackCollections %}
<dl>
<dt>
{% if artist.website %}
<h2><a href="{{ artist.website }}">{{ artist.name }}</a></h2>
{% else %}
<h2>{{ artist.name }}</h2>
{% endif %}
</dt>
<dd>
<ul>
{% for track in artist.tracks %}
<li>“{{ track.title }}”
<i>({{ track.album.title }})</i>
{% endfor %}
</ul>
</dd>
</dl>
{% endfor %}
现在这里几乎是来自我的另一个项目的完全相同的代码,它不再起作用了:
def index(request):
productList = PartModel.objects.filter(isBuild=True, isActive=True).order_by('name')
productCollection = []
for product in productList:
product.part_list = product.buildpart.all().order_by('family__type')[:5]
productCollection.append(product)
return render(request, 'index.html', { 'productCollection': productCollection, })
及其相应的模板:
{% for product in productCollection %}
<p><a href="{{ product.get_absolute_url }}">{{ product.name }}</a>
<p>${{ product.price }}
<ul>
{% for part in product.part_list %}
<li>{{ part.family.type.name }} | {{ part.name }}
{% endfor %}
</ul>
{% endfor %}
此代码曾经有效,但现在却没有。在有效的代码中,我成功地浏览了每个艺术家并附上了该艺术家的曲目。在失败的代码中,我尝试遍历每个构建的PartModel实例并获取该PartModel实例的相应部分。就我所知,它们完全相同。如果填充了productCollection,但由于某种原因,part_list数据为空。这让我相信问题在于这一行:
product.part_list = product.buildpart.all().order_by('family__type')[:5]
但我无法看出这一行的不同之处:
artist.tracks = Track.objects.filter(artist=artist).order_by('order')
提前感谢您的帮助!