Django 在相关集合上使用自定义对象管理器
我正试图打印出4个条目。只要我没有任何未发布的条目,它就可以工作 如何获取仅包含“已发布”管理器中的对象的查询集 现在我使用:{%if-benefit.status==“p”%}不打印那些未发布的条目,但未发布的条目会影响切片计数Django 在相关集合上使用自定义对象管理器,django,django-templates,django-views,Django,Django Templates,Django Views,我正试图打印出4个条目。只要我没有任何未发布的条目,它就可以工作 如何获取仅包含“已发布”管理器中的对象的查询集 现在我使用:{%if-benefit.status==“p”%}不打印那些未发布的条目,但未发布的条目会影响切片计数 #views.py: class PackageListFrontpage(ListView): context_object_name = "package_frontpage_list" template_name = "frontpage.ht
#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 %}
#views.py:
类PackageListFrontpage(列表视图):
context\u object\u name=“软件包\u frontpage\u列表”
template_name=“frontpage.html”
queryset=Package.published.all().order_by('order')[:5]
#frontpage.html
{程序包_frontpage_列表%}中的程序包为%
{{package.name}}>>
{%用于包中的价值。价值_集。所有|切片::4“%}
{%if-benefit.status==“p”%}
{%endif%}
{%empty%}
- 此软件包中没有已发布的好处
{%endfor%}
{%endfor%}
我想有更好的方法吗?您可以在
包
模型上定义一个方法,返回已发布的相关福利查询集
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 %}
{%用于包中的利益。利益\u集\u已发布。所有|切片::4“%}
{%empty%}
此软件包中没有已发布的好处
{%endfor%}