2012-11-14 101 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

這一工程!謝謝! –