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)

では、どうすれば2つの引数を提供できますか?それ以外の場合、カスタムフィルターは正しいですか?

前もって感謝します!

4

1 に答える 1

3

ドキュメントによると、テンプレートフィルタに複数の引数を渡すことはできませんが、代わりに2つのフィルタを使用できます。

レンプレート:

{% 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

(編集:また、フィルターコードのブール値は大文字にする必要があります)

于 2013-03-01T23:06:05.753 に答える