来自多对多关系的查询集
我正在用Django创建一个小日历应用。我有两个模型类:日历(Calendar)和事件(Event)。一个事件可以出现在多个日历中。为了实现这个功能,我使用了多对多关系(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)
我该如何获取一个特定日历中的所有事件呢?
3 个回答
0
mycalendar = Calendar.objects.get(id=1)
events = mycalendar.event_set.all()
这段代码是从这里拿来并做了修改的: http://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships
1
Django自动提供了一种方法,可以访问在多对多关系中的相关对象:
events = my_calendar.events.all()
你可以查看关于多对多关系的文档。
如果你手头没有日历的实例,而只是有一个ID或者名字,你可以通过一个查询就完成整个操作:
events = Event.objects.filter(calendar__id=my_id)
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(title='two').event_set.all()