私のプロジェクト管理アプリには、データベース内のすべてのプロジェクトを一覧表示するページがあります。たとえば、ユーザーが管理者であるプロジェクトのみが表示されるように、プロジェクトをフィルタリングできるようにしたいと考えています。以下のテンプレートのコードは、ユーザーがクリックしたものに応じて異なる引数で project_list ビューを呼び出します。
私が助けを必要としているのは、下のビューの矢印が指しているクエリです。つまり、ユーザーがメンバーであるプロジェクトのみを表示し、ユーザーが管理者でもメンバーでもないすべてのプロジェクトを表示します。
テンプレート:
<h5>Show only projects where you are:</h5>
<div id="filter_div">
<a class="btn btn-success" href="{% url project_list 'admin' %}">Admin</a>
<a class="btn btn-info" href="{% url project_list 'member' %}">Member</a>
<a class="btn" href="{% url project_list 'not_member' %}">Not member</a>
</div>
景色:
def project_list(request, projects_to_show='All'):
if projects_to_show == 'admin':
projects = get_list_or_404(Project.objects.filter(added_by_user = user))
else:
if projects_to_show == 'member':
projects = get_list_or_404(?) // <- only projects where user is a member
else:
if projects_to_show == 'not_member' :
projects = get_list_or_404(?) // <----- only projects where user is NOT admin OR member
projects = get_list_or_404(Project.objects.order_by('name')) // <- all projects (works)
return render(request, 'projects/list.html', {"projects" : projects, "headline" : "All projects"})
モデル 'Project' と 'User' には多対多の関係があります (つまり、テーブル project_users がデータベースに存在します)。これはプロジェクト モデルです。
class Project(models.Model):
... the rest of the fields...
added_by_user = models.ForeignKey(User)
users = models.ManyToManyField(User, related_name='projects')