Django嵌套的QuerySet什么也没产生

时间:2015-04-17 09:37:54

标签: django

我在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>&ldquo;{{ track.title }}&rdquo;
                <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')

提前感谢您的帮助!

0 个答案:

没有答案