【发布时间】:2013-07-30 03:47:32
【问题描述】:
我似乎无法找到一种方法来限制在对对象应用过滤器时返回的多元素。如果有人能提供帮助,我将不胜感激。
假设我有以下模型:
## models.py
class Address(models.Model):
street = models.CharField(max_length=128)
city = models.CharField(max_length=128)
state_province = models.CharField(max_length=128)
zipcode = models.CharField(max_length=5)
country = models.CharField(max_length=128)
class Venue(models.Model):
address = models.ForeignKey(Address)
phone_number = models.CharField(max_length=10)
class Event(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
venues = models.ManyToManyField(Venue)
现在,如果我有一个活动将在两个场地举行,一个活动将在一个场地举行,如下所示(为说明目的而简化):
e1 = Event1
e2 = Event2
v1 = Venue1
v2 = Venue2
e1.venues.add(v1,v2)
e2.venues.add(v1)
我想生成一个查询集,它将带回在“Venue1”发生的所有事件,只有“Venue1”作为这些事件的返回地点。
我试过了
event_list = Event.objects.filter(venues__address__city='CityVenue1')
但是 event_list[0].venues.all()
返回“Venue1”和“Venue2”。
我的偏好是:
- 过滤视图中的 Event 对象而不是 Venue 对象。
- 不通过模板中的标签/过滤器应用任何逻辑,并将其留给视图返回性能所需的查询集 原因。
我的模板遍历事件列表如下:
{% for event in event_list %}
<p>event.name
{% for venue in event.venues.all %}
at {{ venue.address.city }}
{% endfor %}
</p>
{% endfor %}
我希望它返回:
Event1 at CityVenue1
Event2 at CityVenue1
但目前我得到了
Event1 at CityVenue1
at CityVenue2
Event2 at CityVenue1
提前感谢您的帮助。
【问题讨论】:
标签: django many-to-many django-queryset