2011-02-08 3 views
1

장고에 작은 캘린더 응용 프로그램을 만들고 있습니다. 두 개의 모델 클래스가 있습니다. 일정 및 이벤트. 이벤트는 여러 개의 캘린더에있을 수 있습니다. 이 때문에 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 속성을 사용 Calendar 레코드 이 같은 :.

# 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 (제목 = '이') event_set.all는()는`related_name를 지정하지 않으면

1

장고가 자동으로 액세스 할 수있는 방법을 제공합니다 ManyToMany 관계에있는 관련 객체 :

events = my_calendar.events.all() 

many-to-many relationships의 문서를 참조하십시오. 이미 일정 인스턴스하지만, 그냥 ID 또는 이름이없는 경우

, 당신은 하나 개의 쿼리에서 모든 일을 수행 할 수 있습니다

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

= '는'ManyToManyField'에 events'', shouldn 'my_calendar.event_set.all()'을 읽지 않았습니까? – Arnaud