Django 1.3.3 を使用する ReviewBoard 1.6.11 での作業。次のように定義された「アクセス可能」と呼ばれるメソッドを持つ RepositoryManager クラスがあります。
class RepositoryManager(Manager):
def accessible(self, user, visible_only=True, local_site=None):
"""Returns repositories that are accessible by the given user."""
if user.is_superuser:
qs = self.all()
else:
q = Q(public=True)
if visible_only:
q = q & Q(visible=True)
if user.is_authenticated():
q = q | (Q(users__pk=user.pk) |
Q(review_groups__users=user.pk))
qs = self.filter(q).distinct()
return qs.filter(local_site=local_site)
問題は、このクエリの結果を、データベースと対話しない別のもの (ユーザーのファイルシステムのアクセス許可) でフィルター処理したいことです。ただし、accessible() は QuerySet を返す必要があります。それ以外の場合は、リストを作成して、結果から適切な項目を入力するだけです。
私はDjangoにかなり慣れていません。これは合理的なことですか、それとも私はこれについてすべて間違っていますか?