-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Sometimes, it is required to search for one variable in several fields. For example:
import graphene
from graphene_django_filter import AdvancedFilterSet
class UserFilter(AdvancedFilterSet):
class Meta:
model = User
fields= {
'last_name': ('icontains',),
'first_name': ('icontains',),
'sir_name': ('icontains',),
}Graphql query might look like this:
query SearchUser($search: String!) {
users(
filter: {
cross: {
fields: ['last_name', 'first_name', 'sir_name'],
delimiter: ' ' # space, for example
}
}
) {
edges {
node {
id
last_name
first_name
sir_name
}
}
}
}Graphql query should generate sql query via django orm like this:
from django.db.models import Q
delimiter = ' '
search = 'name'
filter = Q(last_name__icontains=search) | Q(first_name__icontains=search) | Q(sir_name__icontains=search)
search = 'name1 name2'
s1, s2 = search.split(delimiter)
filter = Q(
Q(last_name__icontains=s1) | Q(first_name__icontains=s2),
Q(last_name__icontains=s2) | Q(first_name__icontains=s1),
Q(last_name__icontains=s1) | Q(sir_name__icontains=s1),
Q(last_name__icontains=s2) | Q(sir_name__icontains=s2),
# ...
)Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request