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 回答