2016-02-15 34 views
1

這裏是我的Django的看法:如何在Django ORM過濾器中使用OR條件?

def get_initial_queryset(self): 
    filter_dict={} 

    location=self.request.POST.get('location_id') 
    if location: 
     set_if_not_none(filter_dict, 'port__device__host__location', location) 
    client=self.request.POST.get('client') 
    if client: 
     set_if_not_none(filter_dict, 'client__icontains', client) 
    phone=self.request.POST.get('phone')  
    if phone: 
     set_if_not_none(filter_dict, 'phone__icontains', phone) 
    if line: 
     set_if_not_none(filter_dict, 'line__icontains', phone) 

    return Client.objects.filter(**filter_dict) 

這裏我需要帶濾波或條件類似where phone like %phone% or line like %phone% 如何與過濾辦呢?

回答

3

請參閱Complex queries with Q objects。你需要寫類似:

from django.db.models import Q 
Client.objects.filter(Q(phone__icontains=phone) | Q(line__icontains=phone)) 

您也可以建立將q對象是這樣的:

filter = Q() 
location = self.request.POST.get('location_id') 
if location: 
    filter = filter & Q(port__device__host__location=location) 
client = self.request.POST.get('client') 
if client: 
    filter = filter & Q(client__icontains=client) 
phone = self.request.POST.get('phone') 
if phone: 
    filter = filter & (Q(phone__icontains=phone) | Q(line__icontains=phone)) 
return Client.objects.filter(filter) 
+0

謝謝,馬蒂亞斯! –