2013-03-01 54 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