Ejemplo n.º 1
0
    def usable_private_tags(self):
        """
        使用可能な非共有タグを返す
        """
        # 自分がアクセス可能なタグが含まれる可能性のあるタスクは,
        # 有効なタスク(Task.active_django_objects)のうち,
        # public なタスクか,
        # 自身が所属するグループが対象に含まれるタスク
        # (タグを取り出すためにタグが登録されていないものは除く)
        tasks = Task.active_django_objects().filter(
            Q(public=True)
            | Q(users__in=self.own_groups(), tags__isnull=False)).distinct()

        # 自分がアクセス可能なタグが含まれる可能性のあるタスクに
        # 登録されたすべてのタグの pk
        tasks_tags_pk = tasks.values_list('tags__pk', flat=True).distinct()

        # 使用可能な非共有タグは, 有効な非共有タグのうち,
        # 自分が対象のタスクに登録されたタグか,
        # 公開タスクに登録された非共有タグ,
        # または自分が作成したタグ
        return Tag.objects.filter(
            public=False,
            is_active=True).filter(Q(pk__in=tasks_tags_pk) | Q(owner=self))