2013-03-01 57 views
2

在项目管理应用程序中,我正在处理它应该可以编辑/删除一张票,如果您是票的所有者(即创建者)和/或管理员该机票属于的项目。自定义过滤器 - 需要两个参数

在模板用于显示一个项目,我想使用自定义过滤器,以确定这一点,作为在这里看到:

{% if ticket|owner_or_admin:user %} 
    <p> 
     <a href="{% url ticket_edit project.id %}">Edit</a> 
     <a id="delete_link" href="{% url ticket_delete ticket.id %}">Delete</a> 
    </p> 
{% endif %} 

下面是创建这个自定义过滤器的尝试,但是,这将引发一个错误( 'owner_or_admin需要2个参数,提供1'):

@register.filter(name='owner_or_admin') 
def ownership(ticket, project, user): 
    if ticket.user == user: 
     return true;  
    else: 
     if project.added_by_user == user: 
      return true 
    return false 

机型:

class Project(models.Model): 
    ... fields ... 
    added_by_user = models.ForeignKey(User) 

class Ticket(models.Model): 
    ... fields ... 
    user = models.ForeignKey(User) 

那么,我该如何提供两个参数?自定义过滤器是否正确?

在此先感谢!

回答

3

您无法将多个参数传递给模板过滤器according to the docs,但您可以改为使用两个过滤器。

模板:

{% if ticket|owner:user or project|admin:user %} 
    <!-- blah --> 
{% endif %} 

过滤器:

@register.filter(name='owner') 
def ownership(ticket, user): 
    return ticket.user == user 

@register.filter(name='admin') 
def adminship(project, user): 
    return project.added_by_user == user 

(编辑:另外,你在过滤器的代码应该布尔大写)

+0

完美,非常感谢! – holyredbeard 2013-03-01 23:41:42