我在组织和活动之间有多对一的关系。一个组织可以举办许多活动。我有一个模板,用于显示每个人都可以看到按城市过滤的所有事件。但我希望组织详细信息视图显示仅属于特定组织的事件。
models.py
class Organization(models.Model):
name = models.Charfield(max_length=27)
slug = models.SlugField(max_length=25, null=True, blank=True)
[...]
def __unicode__(self):
return self.name
class Events(models.Model):
org = models.ForeignKey(Organization, on_delete=models.CASCADE, default=1)
time = models.DateTimeField(null=True, blank=True)
city = models.CharField(
max_length=25,
choices = CITY_CHOICES,
default = 'NY'
)
[...]
def __unicode__(self):
return '%s %s' % (self.org, self.time)
我使用此模板标记按城市过滤事件(纽约为此):
@register.inclusion_tag('mysite/event_list.html')
def event_ny_tag(event):
return {'events': Events.objects.filter(linn='NY')}
url.py
urlpatterns = [
url(r'^$', HomePageView.as_view(), name='home'),
url(r'^organizations/$', OrganizationList.as_view(), name='organizations'),
url(r'^events/$', EventList.as_view(), name='events'),
url(r'^(?P<slug>[-\w]+)/$', OrgDetailView.as_view(), name='org_detail'),
]
但是,如何仅由一个特定组织过滤事件?只有两个城市,但有20个组织。没有硬编码怎么办呢?有一个slu ??吗?
这不是复制粘贴。只是一个类似于我的示例代码。
答案 0 :(得分:1)
由于事件有外键组织。您可以在其详细视图模板中获取与组织关联的事件列表,如下所示:
{% for event in organization.events_set.all %}
{{ event }}
{% endfor %}
更新:要根据学期进行过滤,您可以使用自定义模板过滤器,将学期作为参数与事件列表一起传递,如下所示:
@register.filter
def semester(events, sem):
return events.filter(semester=sem)
并在模板中执行此操作
<!--Semester 1-->
{% for event in organization.events_set.all|semester:"sem1" %}
{{ event }}
{% endfor %}