2011-02-08 6 views
1

私はDjangoで小さなカレンダーアプリを作成しています。私は2つのモデルクラスを持っています。カレンダーとイベント。イベントは複数のカレンダーに入れることができます。このため、私はManyToMany関係を使用しています。ManyToMany関係のクエリーセット

これは、私は、特定のカレンダーからすべてのイベントでクエリセットを取得できますか私のモデル

from django.db import models 

class Calendar(models.Model): 
    title = models.CharField(max_length = 255) 

    def __unicode__(self): 
     return self.title 

class Event(models.Model): 
    title = models.CharField(max_length = 255) 
    start_date = models.DateField() 
    end_date = models.DateField(blank = True, null = True) 
    location = models.CharField(blank = True, max_length = 255) 
    description = models.TextField(blank = True) 
    important = models.BooleanField(default = False) 
    calendar = models.ManyToManyField(Calendar) 

のですか?

答えて

1

あなたがのインスタンスで.event_set属性を使用しますカレンダーレコード。 。このように:

# create two calendars 
one = models.Calendar.objects.create(title='calendar one') 
two = models.Calendar.objects.create(title='calendar two') 

# attach event 1 to both calendars 
event = models.Event.objects.create(title='event 1', start_date='2011-11-11') 
one.event_set.add(event) 
two.event_set.add(event) 

# attach event 2 to calendar 2 
two.event_set.add(models.Event.objects.create(title='event 2', start_date='2011-11-11')) 

# get and print all events from calendar one 
events_one = models.Calendar.objects.get(title='calendar one').event_set.all() 
print [ event.title for event in events_one ] 
# will print: [u'event 1'] 

# get and print all events from calendar two 
events_two = models.Calendar.objects.get(title='calendar two').event_set.all() 
print [ event.title for event in events_two ] 
# will print: [u'event 1', u'event 2'] 

models.Calendar.objects.get(タイトル= '2')event_set.all()

1

Djangoが自動的にアクセスする方法を提供ManyToMany関係の関連オブジェクト:

events = my_calendar.events.all() 

many-to-many relationshipsのドキュメントを参照してください。

すでにカレンダーのインスタンスを持っていますが、ただIDまたは名前は、1つのクエリで全体のことを行うことができない場合:

events = Event.objects.filter(calendar__id=my_id) 
+1

あなたは 'ManyToManyField'、shouldnに' related_name = 'events''を指定しない限り'my_calendar.event_set.all() 'を読み込んでいませんか? – Arnaud

関連する問題