1

4つのエントリを印刷しようとしています。公開されていないエントリがない限り、機能します。

「公開された」マネージャーからのオブジェクトのみを含むクエリセットを取得するにはどうすればよいですか?

現在、{% if benefit.status == "p" %} を使用して、公開されていないエントリを出力しませんが、公開されていないことがスライス カウントに影響します。

#views.py:

class PackageListFrontpage(ListView):
    context_object_name = "package_frontpage_list"
    template_name = "frontpage.html"
    queryset = Package.published.all().order_by('order')[:5]


#frontpage.html

{% for package in package_frontpage_list %}
<div>
    <h3>{{ package.name }} >></h3>
        <ul>
            {% for benefit in package.benefit_set.all|slice:":4" %}
              {% if benefit.status == "p" %}
                  <li><a href="{{ benefit.get_absolute_url }}">{{ benefit.name }}</a></li>
              {% endif %}
            {% empty %}
            <li>There are no published benefits in this package</li>
            {% endfor %}
        </ul>
</div>
{% endfor %}

これを行うより良い方法があると思いますか?

4

1 に答える 1

0

Package公開されている関連する特典のクエリセットを返すメソッドをモデルに定義できます。

class Package(object):
    ...
    def benefit_set_published(self):
        """
        Return the related benefits which are published
        """
        return self.benefit_set.filter(status="p")

次に、テンプレートを次のように変更します。

        {% for benefit in package.benefit_set_published.all|slice:":4" %}
              <li><a href="{{ benefit.get_absolute_url }}">{{ benefit.name }}</a></li>
        {% empty %}
        <li>There are no published benefits in this package</li>
        {% endfor %}
于 2012-11-14T15:46:36.803 に答える