2017-09-28 7 views
0

私は組織とイベントの間に多対1の関係があります。 1つの組織は多くのイベントを持つことができます。私は、すべての人が街でフィルタリングして見ることができるすべてのイベントを表示するためのテンプレートを用意しています。しかし、私は組織の詳細ビューに特定の組織だけに属するイベントを表示したい。Djangoテンプレートタグはスラッグでフィルタリングします

models.py私は都市(この1のためのNY)でイベントをフィルタリングするために、このテンプレートタグを使用し

class Organization(models.Model): 
    name = models.Charfield(max_length=27) 
    slug = models.SlugField(max_length=25, null=True, blank=True) 
    [...] 

    def __unicode__(self): 
    return self.name 

class Events(models.Model): 
    org = models.ForeignKey(Organization, on_delete=models.CASCADE, default=1) 
    time = models.DateTimeField(null=True, blank=True) 
    city = models.CharField(
    max_length=25, 
    choices = CITY_CHOICES, 
    default = 'NY' 
    ) 
    [...] 
    def __unicode__(self): 
    return '%s %s' % (self.org, self.time) 

@register.inclusion_tag('mysite/event_list.html') 
def event_ny_tag(event): 
    return {'events': Events.objects.filter(linn='NY')} 

url.py

しかし、どのように特定の組織のイベントだけをフィルタリングできますか?たった2つの都市があり、20の組織しかありません。どのようにそれをハードコーディングせずに行うのですか?スラッグと?

これはコピー貼り付けではありません。私のようなサンプルコード。

+0

は、私はあなたが欲しいものだと思うのテンプレートでこれを行うには、HTTPSです://行いますcs.djangoproject.com/en/1.11/topics/db/queries/#following-relationships-backward –

答えて

1

イベントには外部キー組織が存在するため、あなたはこのようにその詳細ビュー・テンプレートに組織に関連付けられたイベントのリストを取得することができます。

{% for event in organization.events_set.all %} 
     {{ event }} 
    {% endfor %} 

更新:は学期などを渡し、カスタムテンプレートフィルタを利用することができ学期に応じてフィルタリングするにはこのようなイベントのリストと一緒に引き、:

@register.filter 
    def semester(events, sem): 
     return events.filter(semester=sem) 

<!--Semester 1--> 
    {% for event in organization.events_set.all|semester:"sem1" %} 
     {{ event }} 
    {% endfor %} 
+0

これは機能します。ありがとうございました! しかしそれ以上のステップを取る。どのように今私は学期ごとにフィルタリングできますか?モデルにはセメスター選択フィールドがあります。 – Reido

+0

私は答えを更新しました。 –

関連する問題