2016-10-13 5 views
0

ユーザーが自分のアカウントを設定できるポッドキャスト管理Webサイトがあります。その後、その特定のユーザーから複数のエピソードを作成できます。エピソードが終了すると、ユーザーが使用するために自動的に作成されるリンクが表示されるボタンが表示されます。私が抱えている問題は、すべてのエピソードで、その特定のエピソードのリンクを表示しようとしていますが、私は最近作成したエピソードとそれ以前に作成したエピソードとのリンクを常に表示し続けています。Django:特定のIDへのクエリのフィルタリング

このエピソードは、リンクを作成したときに、ユーザーがクリックするボタンです:

<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パターン:

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

何かご意見をお聞かせください!

+0

if関数のすぐ上に 'print(production_id)'を置き、 'production_id'が正しいかどうかを確認してください。 – 1GDST

+0

@ 1GDSTええ、正しいidを取得します – wlmrlsda

答えて

0

getメソッドのidでフィルタリングしますが、結果には何もしないでください。テンプレートコンテキストを構築するとき、Djangoはself.podcastだけでフィルタリングするget_querysetを呼び出します。これはNoneです。

このフィルタロジックをget_querysetに移動する必要があります。また、ポッドキャストでフィルタリングしたい場合は、そのパラメータも定義する方法を見つける必要があります。

+0

助けてくれてありがとう。ちょうど理解するために、私は 'get'メソッドを削除し、' get_queryset'をすべてのフィルタロジックで残すべきですか?リンクは個々の 'production' **(エピソードとみなされます)**にあり、' production'は 'podcast'にありますので、その特定の'生産する。 – wlmrlsda

+0

申し訳ありませんが、私はかなり理解していません。 –

+0

混乱して申し訳ありません。私の主な質問は最初の文でした。残りの部分は、ユーザーの流れ方の詳細な説明です。 – wlmrlsda

関連する問題