私はdjangoフォーラムで、私は嫌がらせをしているユーザーを4日間、維持しています。フォーラムの「ホームページ」では、全員のコメントを表示しますが、地獄で禁止されている人のコメントは除外しています。それはこのように書きます:スライスを撮影した後にDjangoクエリーセットをフィルタリングする
def get_queryset(self):
if self.request.user_banned: #if user is hell-banned
return Link.objects.order_by('-id')[:120]
else: #if user is not hell-banned
global condemned
queryset = Link.objects.order_by('-id').exclude(submitter_id__in=condemned)[:120]
return queryset
上記はListView
のget_queryset
方法です。地獄の禁止されたユーザーが、自分のコメントがサイトから除外されていると言うことができないことに注目してください(地獄禁止のポイント)。 condemned
は、地獄で禁止されたユーザーの主キーを含むリストです。
今、私は上記をでスライスし、後で禁止された人々を除外してに最適化したいと思います。
Cannot filter a query once a slice has been taken.
私はどのような選択肢があります:
def get_queryset(self):
if self.request.user_banned: #if user is hell-banned
return Link.objects.order_by('-id')[:120]
else: #if user is not hell-banned
global condemned
queryset = Link.objects.order_by('-id')[:120]
queryset = queryset.exclude(submitter_id__in=condemned)
return queryset
これはunfotunately私にエラーを与える:私は経由していることをやろうとしていますか?パフォーマンスが重要なので、私が見つけることができる最も効率的なソリューションが必要です。私はDjangoにいます< 1.8。前もって感謝します。
特にDjangoのバージョンは? Django <1.8は不必要に曖昧です。 – wim
@wim:Django 1.7。 –
クエリの取得時間はどのくらいですか?なぜ、「最初にスライスし、後に禁止された人々を除外する」がより速くなると思いますか? 'submitter_id'は外部キーですか? 「非難」リストはどれくらいの大きさですか? – Alasdair