2017-09-08 8 views
0

このコードでは、SQLクエリは 'all_user_videos'のみで実行され、その後のフィルタは 'all_user_videos'に格納された結果を使用してフィルタを実行すると考えました。新しいSQLクエリを起動せずにクエリ結果をフィルタリングする

# Get all user videos 
    all_user_videos = Video.objects.filter(author = user) 

    # User pending videos 
    pending_videos = all_user_videos.filter(status = 'pending_review') 

    # Get user Video that need information 
    info_required_videos = all_user_videos.filter(status = 'info_required') 

    # Get user video on sale 
    on_sale_videos = all_user_videos.filter(status = 'on_sale') 

context = { 
     "user_member_profile": instance, 
     'pending_videos'  : pending_videos, 
     'info_required'  : info_required_videos, 
     'on_sale'   : on_sale_videos 
    } 

それぞれのフィルタがクエリを実行しているようです。 pending_videos、info_required_videos、on_sale_videosがクエリを再起動せず、 'all_user_videos'のクエリの結果を使用するようにするにはどうすればよいですか?

答えて

0

クエリでregexを使用できます。

all_user_videos = list(Video.objects.filter(author=user, status__regex=r'^(pending_review|info_required|on_sale)$')) 
pending_videos = [i for i in all_user_videos if i.status == 'pending_review'] 

または

pending_videos = [] 
for i in all_user_videos: 
    if i.status == 'pending_review': 
     pending_videos.append(i) 
    elif i.status == 'info_required': 
     ... 
+0

それはあなたに感謝動作しますが、あなたは正規表現を使用する理由私は得ることはありません。これはうまくいきません...ユーザーからのすべてのビデオを取得し、それぞれの場合に必要なところで理解を使用してください。 –

+0

'すべてのビデオをユーザーから取得する '、これには' pending_review' | info_required | on_sale'。 Regexはall_videosリストをいくらか減らすのに役立ちます。 –

関連する問題