2016-01-12 129 views
0

的外键我有这些模型在我的Django应用程序:Django的模板得到查询集

class GeoBonus(models.Model): 
name = models.CharField(max_length=250) 
country = models.ForeignKey(Country, related_name='geo_bonuses') 
bookmaker = models.ForeignKey(Bookmaker, related_name='geo_bonuses') 

属性在国家和博彩公司并不是那么重要,可以说,每一个有name参数。
在模板中我有一个用于循环:

{% for bookmaker in bookmakers %} 
    {{bookmaker.name}} 
{% endfor %} 

,我想打印基于country GeoBonus的name。可以说用户的国家是一个字符串。

{% for bookmaker in bookmakers %} 
    {{bookmaker.name}} 
    {% if country_code %} 
     {% for geo_bonus in bookmaker.geo_bonuses|in_country:country_code %} 
      {{geo_bonus}} 
     {% endfor %} 
    {% endif %} 
{% endfor %} 

这是我的过滤器:

@register.filter 
def in_country(qs, country_code): 
    return qs.filter(country__twocode=country_code) 

哪里country_code通过查看发送:

context = RequestContext(request,{ 
     'bookmakers': Bookmaker.objects.select_related('geo_bonuses').all(), 
     'country_code': country_code, 
    }) 

但是,这是行不通的。我究竟做错了什么?我得到Invalid filter: 'in_country'(如果我使用简单的过滤器作为upper的字符串,它的工作原理,所以模板标签加载)。

所以基本上我的问题是,如何选择一个外键,同时运行一个for循环

+0

您没有将'in_country'导入到您的模板中。你需要使用'{%load file_that_defined_in_country%}'加载过滤器:https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/ –

回答

1

这个问题与外键或查询集完全没有关系。该错误告诉你到底发生了什么错误:它不识别“in_country”过滤器。

你的说法,即“模板标签加载”,因为upper作品不遵循所有:upper是由内置的Django本身提供的过滤器,而in_country不是。您需要先使用{% load module_that_defines_filter %}加载模板标签库,然后才能使用它。

+0

你是对的。但是我的模板中有{%name_of_file%},文件夹中包含'__init __。py'文件,这很奇怪。 – Lucas03

+0

我不明白你的评论。你需要实际调用'load'。 –

+0

我确实呼叫负载。但我做了另一个愚蠢的错误。我在另一个应用中使用了同名文件。这是问题所在。谢谢你的帮助! – Lucas03