Django:将查询过滤到特定的ID

时间:2016-10-13 18:14:47

标签: python django django-templates django-views django-urls

我有一个播客管理网站,用户可以在其中设置自己的帐户,之后可以创建该特定用户的多个剧集。完成一集后,会出现一个按钮,在那里他可以看到一些自动创建供用户使用的链接。我遇到的问题是,对于每一集,我都试图显示该特定链接的链接,但它始终显示我最近创建的链接和之前创建的其他剧集的链接。

这是用户在剧集创建链接时点击的按钮:

<a class="btn btn-info box-shadow--6dp" href="{% url 'pf:episodereview' production_id=instance.id %}" role="button"><i class="fa fa-link" aria-hidden="true"></i>&nbsp Review Links</a>

urls.py中的网址格式:

url(r'^episodereview/(?P<production_id>[0-9]+)/$', views.EpisodeReview.as_view(), name="episodereview"),

这是views.py

中发生的情况
class EpisodeReview(LoginRequiredMixin, ProductionRequiredMixin, ListView):
    template_name = 'pf/forms_episode_review.html'
    podcast = None

    def get(self, request, *args, **kwargs):
        production_id = kwargs.get('production_id', None)

        if production_id:
            production = Production.objects.filter(id=production_id).first()
            if not production:
                return self.handle_no_permission()

        return super(EpisodeReview, self).get(request, *args, **kwargs)

    def get_queryset(self):
        return Production.objects.filter(podcast=self.podcast)

    def get_success_url(self):
        return reverse('pf:dashboard')

显示所有内容的模板:

{% extends "pf/base.html" %}
{% load crispy_forms_tags %}


{% block content %}

<br>
<br>

<div class="panel panel-default box-shadow--16dp col-sm-6 col-sm-offset-3">
<div class="panel-body">

<div class='row'>
<div class='col-sm-12'>

<h3><i class="fa fa-wpforms pull-right" aria-hidden="true"></i>Episode Review&nbsp</h3>

<h5>Following links are generated automatically with your accounts and can be used immediately.</h5>

<hr/>

    {% if object_list %}

        <table class='table'>
            <tbody>
            {% for instance in object_list %}
                <ul>
                    <li><b>Wordpress URL:</b> {{ instance.wordpress_url }}</li>
                    <li><b>Wordpress Short URL:</b> {{ instance.wordpress_short_url }}</li>
                    <li><b>Soundcloud Result URL:</b>{{ instance.soundcloud_result_url }}</li>
                    <li><b>Youtube Result URL:</b>{{ instance.youtube_result_url }}</li>
                    <li><b>Libsyn Result URL:</b>{{ instance.libsyn_result_url }}</li>
                </ul>
            {% endfor %}
            </tbody>
        </table>
    {% endif %}
<hr/>
<button type="submit" class="btn btn-info box-shadow--6dp"><i class="fa fa-floppy-o" aria-hidden="true"></i> &nbspSave
</button>

</div>
</div>

</div>
</div>

{% endblock %}

欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

您可以按get方法中的id进行过滤,但不要对结果执行任何操作。在构造模板上下文时,Django调用get_queryset,它只能通过self.podcast进行过滤 - 这是None。

您应该将该过滤器逻辑移动到get_queryset中。如果您还想通过播客进行过滤,您也应该找到一种定义该参数的方法。