2012-11-14 67 views
1

我试着打印出4项。它的作品,只要我没有任何未公布的条目。有关使用自定义对象管理器设置

我怎样才能得到一个只包含从我的“发布”管理对象的查询集?

现在我用:{%如果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 %} 

我想有更好的方法来做到这一点?

回答

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 %} 
+0

这一工程!谢谢! –