我正在創建一個搜索功能,我們可以在其中搜索基于 ,
first_name,last_name.username它應該過濾除登錄用戶之外的所有匹配項(如果至少有任何欄位匹配它應該考慮)用戶。這就是我所做的,但我正在尋找一個高效的 Django 查詢集。
if search_name is not None and len(search_name) >= 3: search_obj_1 = User.objects.filter(first_name__iexact=search_name).exists() search_obj_2 = User.objects.filter(last_name__iexact=search_name).exists() if search_obj_1: search_obj_1 = User.objects.filter(Q(first_name__iexact=search_name)) &User.objects.filter(~Q(id=logged_user_id)) search_obj_2 = User.objects.filter(Q(last_name__iexact=search_name)) & User.objects.filter(~Q(id=logged_user_id)) search_obj_3 = [] search_obj = list(chain(search_obj_1, search_obj_2, search_obj_3)) elif search_obj_2: search_obj_1 = [] search_obj_2 = User.objects.filter( Q(last_name__iexact=search_name)) & User.objects.filter(~Q(id=logged_user_id)) search_obj_3 = User.objects.filter( Q(username__iexact=search_name)) & User.objects.filter(~Q(id=logged_user_id)) search_obj = list( chain(search_obj_2, search_obj_3, search_obj_1)) else: search_obj_1 = [] search_obj_2 = [] search_obj_3 = User.objects.filter( Q(username__iexact=search_name)) & User.objects.filter(~Q(id=logged_user_id)) search_obj = list( chain(search_obj_3, search_obj_1, search_obj_2))那么有沒有更好的方法做同樣的事情。
uj5u.com熱心網友回復:
您可以嘗試這樣的事情(使用聯合運算子 |):
search_obj = User.objects.exclude(id=logged_user_id).filter(
Q(first_name__iexact=search_name)
| Q(last_name__iexact=search_name)
| Q(username__iexact=search_name)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537573.html
標籤:姜戈django-rest-框架django 视图drf查询集
