从多对多关系的查询 [英] Queryset from a ManyToMany relation

查看:165
本文介绍了从多对多关系的查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Django创建一个小日历应用程序。我有两个模型类;日历和事件。事件可以在多个日历中。因为这样我使用了一个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 = True)
important = models.BooleanField(default = False)
calendar = models.ManyToManyField(Calendar)

如何从特定日历中获取所有事件的查询器?

解决方案

日历记录实例上的.event_set属性。像这样:

 #创建两个日历
one = models.Calendar.objects.create(title ='calendar one ')
two = models.Calendar.objects.create(title ='calendar two')

#将事件1连接到两个日历
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'))

#获取并打印日历中的所有事件
events_one = models.Calendar.objects.get(title ='calendar one')。event_set.all()
print [event.title for event in event_one]
#将打印:[u'event 1']

#从日历2获取并打印所有事件
events_two = models.Calendar.objects.get(title = 'calendar two')。event_set.all()
print [event.title for event in events_two]
#将打印:[u'event 1' ,u'event 2']

models.Calendar.objects.get(title ='two') .event_set.all()


I'm creating a little calendar app in Django. I have two model classes; Calendar and Event. An event can be in multiple calendars. Because of this I'm using a ManyToMany relation.

This is my model

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)

How can I get a queryset with all events from a specific calendar?

解决方案

You would use the .event_set attribute on an instance of a Calendar record. Like this:

# 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()

这篇关于从多对多关系的查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆