0

私のプロジェクト管理アプリには、すべてのプロジェクトを一覧表示するページがありますが、プロジェクトがユーザーによって所有されているか、ユーザーがプロジェクトのメンバーであるか、またはどちらでもないかを表示したいと考えています。これは、テンプレートの次のコードで行います。

...
{% load custom_filters %}
...

{% for project in projects %}
    {% if project|ownership:user %}
        <div class="users_project label label-info">
            Admin
        </div>
        <a href="{% url show_project project.id %}">{{ project }}</a><br/>
    {% else %}
        {% if project|membership:user %}
            <div class="users_project label label-success">
                Member
            </div>
            <a href="{% url show_project project.id %}">{{ project }}</a><br/>
        {% else %}
                <div class="users_project label label-error">
        Not member
        </div>
            <a href="{% url show_project project.id %}">{{ project }}</a><br/>
        {% endif %}
    {% endif %}
{% endfor %}

ここで使用される最初のカスタム フィルター (プロジェクト|所有権) は想定どおりに機能します。

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

...しかし、他の (プロジェクト|メンバーシップ) については、助けが必要です。

@register.filter(name='membership')
def membership(project, user):
    return ?

モデル "User" と "Project" には多対多の関係があります。

class Project(models.Model):
... other fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')

...これにより、「project_users」と呼ばれるデータベース内のテーブルが作成され、次のフィールドが含まれます。

project_id (INT)
user_id    (INT)
4

1 に答える 1

1

ManyToMany フィールドを直接クエリできます。

project.users.filter(id=user.id).exists()

これは、そのユーザー レコードがユーザーのリストに含まれているかどうかを示すブール値を返します。

于 2013-03-04T17:49:30.167 に答える