【发布时间】:2011-10-12 00:22:10
【问题描述】:
我有一个名为 Subtopic 的模型。我的一个模板在一个对象上运行一个 forloop,为表格行的每个单元格返回一个不同的字段。
两个表格单元格查找一个字段,该字段是一个多对多外键,都指向同一个外部模型资源。我希望每个都根据资源模型中布尔字段的值显示不同的结果。
您在下面看到的内容目前工作正常,但并未尝试按布尔字段进行过滤。
models.py:
class ICTResourceManager(models.Manager):
def get_query_set(self):
return super(ICTResourceManager, self).get_query_set().filter('is_ict': True)
class NonICTResourceManager(models.Manager):
def get_query_set(self):
return super(NonICTResourceManager, self).get_query_set().filter('is_ict': False)
class Resource(models.Model):
subtopics = models.ManyToManyField(Subtopic)
external_site = models.ForeignKey(ExternalSite)
link_address = models.URLField(max_length=200, unique=True, verify_exists=False)
requires_login = models.BooleanField()
is_ict = models.BooleanField()
flags = models.ManyToManyField(Flag, blank=True)
comment = models.TextField()
def __unicode__(self):
return u'%s %s' % (self.external_site, self.link_address)
objects = models.Manager()
ict_objects = ICTResourceManager()
nonict_objects = NonICTResourceManager()
class Meta:
ordering = ['external_site', 'link_address']
views.py:
def view_ks5topic(request, modulecode, topicshortname):
listofsubtopics = Subtopic.objects.filter(topic__module__code__iexact = modulecode, topic__shortname__iexact = topicshortname)
themodule = Module.objects.get(code__iexact = modulecode)
thetopic = Topic.objects.get(module__code__iexact = modulecode, shortname__iexact = topicshortname)
return render_to_response('topic_page.html', locals())
我的模板:
{% for whatever in listofsubtopics %}
<tr>
<td>
{{ whatever.objective_html|safe }}
<p>
{% if request.user.is_authenticated %}
{% with 'objective' as column %}
{% include "edit_text.html" %}
{% endwith %}
{% else %}
{% endif %}
</td>
<td>
{% regroup whatever.resource_set.all by external_site.name as resource_list %}
{% for external_site in resource_list %}
<h4>{{ external_site.grouper }}</h4>
<ul>
{% for item in external_site.list %}
<li><a href="{{ item.link_address }}">{{ item.comment }}</a></li>
{% endfor %}
</ul>
{% endfor %}
</td>
</tr>
{% endfor %}
如您所见,我在模型中添加了额外的管理器来为我进行过滤,但是当我替换模板中的相应行时,我只会得到空白。我试过:for external_site.ict_objects in resource_list 和 for item.ict_objects in resource_list 和 <a href="{{ item.ict_objects.link_address }}">。如果这是在视图中,我可能只通过.filter('is_ict': True) 进行过滤,但是由于它在 forloop 中,我不知道在哪里进行过滤。
我也尝试在模板中写regroup whatever.resource_set.filter('is_ict': True),但重组的语法似乎使用resource_set.all而不是resource_set.all()(我不知道为什么)所以过滤文本在这里不起作用。
【问题讨论】: