确定用户是否通过django模板中的另一个类与对象关联

时间:2010-01-12 16:35:21

标签: django templates

我有一个用户模型,一个模型和一个拥有模型来存储有关拥有项目的用户的数据。当用户登录并查看项目时,我想显示“添加到我的项目”按钮,除非用户已经拥有该项目。

我在模板中尝试了这段代码:

{% if not user.possession_set.filter(item=item.id) %}    
<input type='submit' value='add to my items' />
{% endif %}

,其中 item 是我拥有的模型中项目对象的外键名称 item.id 是向用户显示的项目的主键

但是我收到了这个错误:

Could not parse the remainder: '(item=item.id)'

我想我不能使用.filter()函数,因为那是用于查询数据库的?我找到了django的模板过滤器,就像这样: http://docs.djangoproject.com/en/1.1/ref/templates/builtins/#get-digit 但是没有任何可以组合来过滤特定值的项目。似乎我会在模板中有所有信息来做这件事,因为我得到的是用户而且它是possession_set,它应该有每个拥有的项目字段,所以我认为它只是一个语法的东西?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以为此编写自定义模板过滤器。

def owns(user, id):
    return not user.possession_set.filter(item=id)

然后,在您的模板中:

{% load mystuff %}
{% if user|owns:item.id %}

查看http://docs.djangoproject.com/en/1.1/howto/custom-template-tags/上的Django文档以获取更多信息。但是不确定传递item.id作为过滤器参数是否有效。

答案 1 :(得分:1)

您不能在模板中使用此类复杂表达式,仅在视图中使用。计算信息,用户是否可以在视图中使用此按钮并将单个True或False值传递给模板。例如:

在视图中

allow_addition = not user.possession_set.filter(item=item.id)

并在模板中:

{% if allow_addition %}
  <input type='submit' value='add to my items' />
{% endif %}