Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在相关集合上使用自定义对象管理器_Django_Django Templates_Django Views - Fatal编程技术网

Django 在相关集合上使用自定义对象管理器

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

我正试图打印出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 %}
#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%}