0

私はdjango-mpttを使用していますが、行き詰まっています。

各カテゴリのすべてのオブジェクトを、子孫カテゴリのすべてのオブジェクトとともに取得したいと思います。

目標を達成することができましたが、問題が1つあります。アイテムは複数のオブジェクトから生成されているため、並べ替えることができません。

私のアプローチは悪いと思います。

どうすれば目標を達成し、返されたすべてのオブジェクトを組み合わせて日付順に並べ替えることができますか?

意見:

 def category_view(request, pk, slug, sub_pk=None, subcategory=None):

    if not subcategory:
        current_category = get_object_or_404(Category, pk=int(pk))
        adv_obj = current_category.get_descendants(include_self=True)
        print adv_obj

    else:
        current_category = get_object_or_404(Category, pk=int(sub_pk))
        adv_obj = current_category.get_descendants(include_self=True)


    return TemplateResponse(request, "category_view.html", {'category_details':current_category,
                                                            'advert': adv_obj,
                                                           },
                            )

レンプレート:

{% block content %}
<div class="grid_8">
    <h2>{{category_details.name}}</h2>
    <hr>
    <div>
        {% for n in advert.all %}
        {% for p in n.advert_set.all %}

        <div>
            <h3>{{p.title}}</h3>
            <span class="annoucement_detail">Kategoria: </span><a href="{{n.category.get_absolute_url}}">{{p.category.name}}</a>
            {% if p.location %} | <span class="annoucement_detail">Miejscowość: </span>{{p.location}}
            {% endif %}
            <div>
                <span class="annoucement_detail">Data dodania: </span> {{p.date_added}} | <span class="annoucement_detail">Data wygaśnięcia: </span>{{p.expiration_date}}
            </div>
            <div>
                {{p.text}}
            </div>
        </div>
        <hr>
        {% endfor %}
        {% endfor %}
    </div>

</div>
{% endblock%}

編集:

私はアイデアを思いついた。ビューの結果を繰り返し処理し、itertoolsでチェーンします。それがうまくいくかどうか明日チェックします:)

4

1 に答える 1

1

それが私の答えです:)

def category_view(request, pk, slug, sub_pk=None, subcategory=None):

    advert_list = []

    if not subcategory:
        current_category = get_object_or_404(Category, pk=int(pk))
        adv_obj = current_category.get_descendants(include_self=True)

        for n in adv_obj:

            for p in n.advert_set.all().order_by('-date_added'):
                advert_list.append(p)

        adv_obj = chain(advert_list)

        adv_obj = sorted(adv_obj, key=operator.attrgetter('date_added'))
        adv_obj.reverse()


    else:
        current_category = get_object_or_404(Category, pk=int(sub_pk))
        adv_obj = current_category.get_descendants(include_self=True)

        for n in adv_obj:

            for p in n.advert_set.all().order_by('-date_added'):
                advert_list.append(p)

        adv_obj = chain(advert_list)
        adv_obj = sorted(adv_obj, key=operator.attrgetter('date_added'))
        adv_obj.reverse()

    return TemplateResponse(request, "category_view.html", {'category_details':current_category,
                                                            'advert': adv_obj,
                                                           },
                            )
于 2012-07-29T09:50:06.180 に答える